Очакваният ви JSON показва foods
като дете на portions
. За да направите това, трябва да настроите тази връзка.
На вашата Portion
модел, трябва да настроите следната връзка:
public function foods() {
return $this->hasMany(Food::class);
}
С тази настройка на връзката вече можете да получите данните си по следния начин:
$categories = App\FoodGroup::with('portions.foods')->get();
Това ще зареди вашите хранителни групи, след това ще зареди порциите в групите храни и след това ще зареди храните в порциите.
Редактиране
Може да съм прочел малко погрешно въпроса ви. Предполагах, че имате portions
връзка, дефинирана в \App\FoodGroup
. Ако не, можете да добавите това така:
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();
}
Редактиране 2
Това решение е малко хакерско, защото третира foods
таблица като централна маса, въпреки че не е специално проектирана за това. Поради това в foods
има множество записи таблица, която съдържа едни и същи стойности на двойки ключове и ето защо получавате дублирани свързани модели.
Ако хвърлите distinct()
върху връзката, това трябва да се погрижи за проблема, тъй като ще премахне дубликатите, създадени от вътрешното присъединяване. Кодът по-горе е променен.