sql >> Database >  >> RDS >> Mysql

hoe een JSON-antwoord te bestellen op basis van databaserelatie met behulp van welsprekend

Uw verwachte JSON toont foods als een kind van portions . Om dit te doen, moet u deze relatie instellen.

Op je Portion model, moet u de volgende relatie instellen:

public function foods() {
    return $this->hasMany(Food::class);
}

Met deze relatieconfiguratie kunt u uw gegevens nu als volgt verkrijgen:

$categories = App\FoodGroup::with('portions.foods')->get();

Hiermee worden uw voedselgroepen geladen, vervolgens worden de porties in de voedselgroepen geladen en vervolgens worden de voedingsmiddelen in de porties geladen.

Bewerken

Ik heb je vraag misschien een beetje verkeerd gelezen. Ik nam aan dat je een portions . had relatie gedefinieerd op \App\FoodGroup . Zo niet, dan kun je dit als volgt toevoegen:

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();
}

Bewerk 2

Deze oplossing is een beetje hacky omdat het de foods behandelt table als een draaitabel, hoewel het daar niet specifiek voor is ontworpen. Hierdoor zijn er meerdere items in de foods tabel die dezelfde sleutelpaarwaarden bevatten, en dit is de reden waarom u dubbele gerelateerde modellen krijgt.

Als je een distinct() . gooit op de relatie, zou dit het probleem moeten oplossen, omdat het de duplicaten verwijdert die zijn gemaakt vanuit de inner join. De bovenstaande code is aangepast.



  1. Kunnen we Oracle tools.jar opnieuw distribueren?

  2. HTML opslaan in MySQL-database

  3. SQL om vrienden EN vrienden van vrienden van een gebruiker te krijgen

  4. Gegevens uit meerdere tabellen in één rij krijgen terwijl u enkele waarden aaneenvoegt