Il tuo JSON previsto mostra foods
come figlio di portions
. Per fare ciò, devi impostare questa relazione.
Sulla tua Portion
modello, è necessario impostare la seguente relazione:
public function foods() {
return $this->hasMany(Food::class);
}
Con questa configurazione della relazione, ora puoi ottenere i tuoi dati in questo modo:
$categories = App\FoodGroup::with('portions.foods')->get();
Questo caricherà i tuoi gruppi di alimenti, quindi caricherà le porzioni nei gruppi di alimenti e quindi caricherà gli alimenti nelle porzioni.
Modifica
Forse ho letto leggermente male la tua domanda. Ho pensato che avessi un portions
relazione definita su \App\FoodGroup
. In caso contrario, puoi aggiungere questo in questo modo:
Gruppo alimentare:
public function portions() {
// the second parameter is the name of the pivot table.
// in this case, your foods table connects your portions and food groups.
return $this->belongsToMany(Portion::class, 'foods')->distinct();
}
Modifica 2
Questa soluzione è un po' complicata perché tratta i foods
table come tabella pivot, sebbene non sia stata progettata specificamente per questo. Per questo motivo, ci sono più voci in foods
tabella che contiene gli stessi valori di coppia di chiavi, ed è per questo che ottieni modelli correlati duplicati.
Se lanci un distinct()
sulla relazione, questo dovrebbe risolvere il problema, poiché eliminerà i duplicati creati dall'unione interna. Il codice sopra è stato modificato.