Váš očekávaný JSON zobrazuje foods
jako potomek portions
. Chcete-li to provést, musíte tento vztah nastavit.
Na vaší Portion
modelu, musíte nastavit následující vztah:
public function foods() {
return $this->hasMany(Food::class);
}
S tímto nastavením vztahu nyní můžete získat svá data takto:
$categories = App\FoodGroup::with('portions.foods')->get();
Tím se načtou skupiny potravin, poté se načtou porce do skupin potravin a poté se načtou potraviny do porcí.
Upravit
Možná jsem si trochu špatně přečetl vaši otázku. Předpokládal jsem, že máte portions
vztah definovaný na \App\FoodGroup
. Pokud ne, můžete to přidat takto:
FoodGroup:
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();
}
Upravit 2
Toto řešení je trochu nešikovné, protože zpracovává foods
tabulka jako kontingenční tabulka, i když pro to nebyla speciálně navržena. Z tohoto důvodu je v foods
více položek tabulky, které obsahují stejné hodnoty páru klíčů, a to je důvod, proč získáváte duplicitní související modely.
Pokud vyvoláte distinct()
na vztah by to mělo vyřešit problém, protože to odstraní duplikáty vytvořené z vnitřního spojení. Výše uvedený kód byl změněn.