Ihr erwarteter JSON zeigt foods
als untergeordnetes Element von portions
. Dazu müssen Sie diese Beziehung einrichten.
Auf Ihre portions
model, müssen Sie die folgende Beziehung einrichten:
public function foods() {
return $this->hasMany(Food::class);
}
Mit dieser Beziehungseinstellung können Sie Ihre Daten jetzt wie folgt abrufen:
$categories = App\FoodGroup::with('portions.foods')->get();
Dadurch werden Ihre Lebensmittelgruppen geladen, dann werden die Portionen in die Lebensmittelgruppen geladen, und dann werden die Lebensmittel in die Portionen geladen.
Bearbeiten
Vielleicht habe ich deine Frage etwas falsch verstanden. Ich nahm an, Sie hätten eine portions
Beziehung definiert auf \App\FoodGroup
. Wenn nicht, können Sie dies folgendermaßen hinzufügen:
Lebensmittelgruppe:
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();
}
Bearbeiten 2
Diese Lösung ist ein wenig tricky, weil sie die foods
behandelt table als Pivot-Tabelle, obwohl sie nicht speziell dafür entwickelt wurde. Aus diesem Grund gibt es mehrere Einträge in foods
Tabelle, die dieselben Schlüsselpaarwerte enthalten, und deshalb erhalten Sie doppelt verwandte Modelle.
Wenn Sie ein distinct()
werfen auf die Beziehung, sollte dies das Problem lösen, da es die Duplikate eliminiert, die von der inneren Verknüpfung erstellt wurden. Der obige Code wurde geändert.