Din förväntade JSON visar foods
som ett barn till portions
. För att göra detta måste du ställa in denna relation.
På din Portion
modell måste du ställa in följande relation:
public function foods() {
return $this->hasMany(Food::class);
}
Med den här relationskonfigurationen kan du nu få dina data så här:
$categories = App\FoodGroup::with('portions.foods')->get();
Detta kommer att ladda dina livsmedelsgrupper, sedan laddar det portionerna i livsmedelsgrupperna och sedan laddar det maten i portionerna.
Redigera
Jag kan ha läst din fråga lite fel. Jag antog att du hade en portions
relation definierad på \App\FoodGroup
. Om inte, kan du lägga till detta så här:
Livsmedelsgrupp:
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();
}
Redigera 2
Den här lösningen är lite hackig eftersom den behandlar foods
bordet som ett pivotbord, även om det inte var speciellt utformat för det. På grund av detta finns det flera poster i foods
tabell som innehåller samma nyckelparvärden, och det är därför du får dubbletter av relaterade modeller.
Om du kastar en distinct()
på relationen, bör detta ta hand om problemet, eftersom det kommer att eliminera dubbletterna som skapas från den inre sammanfogningen. Koden ovan har ändrats.