Mysql
 sql >> Datenbank >  >> RDS >> Mysql

wie man eine JSON-Antwort basierend auf einer Datenbankbeziehung mit Eloquent bestellt

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.