Twój oczekiwany JSON zawiera foods
jako dziecko portions
. Aby to zrobić, musisz skonfigurować tę relację.
Na twojej portions
modelu, musisz ustawić następującą relację:
public function foods() {
return $this->hasMany(Food::class);
}
Dzięki tej konfiguracji relacji możesz teraz uzyskać swoje dane w następujący sposób:
$categories = App\FoodGroup::with('portions.foods')->get();
Spowoduje to załadowanie twoich grup żywności, następnie załaduje porcje do grup żywności, a następnie załaduje żywność do porcji.
Edytuj
Mogłem trochę źle zinterpretować twoje pytanie. Założyłem, że masz portions
relacja zdefiniowana w \App\FoodGroup
. Jeśli nie, możesz dodać to w ten sposób:
Grupa Żywności:
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();
}
Edytuj 2
To rozwiązanie jest trochę dziwaczne, ponieważ traktuje foods
tabeli jako tabeli przestawnej, chociaż nie została specjalnie do tego zaprojektowana. Z tego powodu w foods
znajduje się wiele wpisów tabela zawierająca te same wartości pary kluczy i dlatego otrzymujesz zduplikowane powiązane modele.
Jeśli wrzucisz distinct()
na relację, powinno to rozwiązać problem, ponieważ wyeliminuje duplikaty utworzone z połączenia wewnętrznego. Powyższy kod został zmodyfikowany.