sql >> Databasteknik >  >> RDS >> Mysql

hur man beställer ett JSON-svar baserat på databasförhållande med vältalig

Din förväntade JSON visar foods som ett barn till portions . För att göra detta måste du ställa in denna relation.

På din Portion modell måste du ställa in följande relation:

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

Med den här relationskonfigurationen kan du nu få dina data så här:

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

Detta kommer att ladda dina livsmedelsgrupper, sedan laddar det portionerna i livsmedelsgrupperna och sedan laddar det maten i portionerna.

Redigera

Jag kan ha läst din fråga lite fel. Jag antog att du hade en portions relation definierad på \App\FoodGroup . Om inte, kan du lägga till detta så här:

Livsmedelsgrupp:

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

Redigera 2

Den här lösningen är lite hackig eftersom den behandlar foods bordet som ett pivotbord, även om det inte var speciellt utformat för det. På grund av detta finns det flera poster i foods tabell som innehåller samma nyckelparvärden, och det är därför du får dubbletter av relaterade modeller.

Om du kastar en distinct() på relationen, bör detta ta hand om problemet, eftersom det kommer att eliminera dubbletterna som skapas från den inre sammanfogningen. Koden ovan har ändrats.



  1. Docker mysql kan inte ansluta till behållaren

  2. Lägg till 2 timmar till nuvarande tid i MySQL?

  3. Förbyggd Oracle-databas för inlärning och testning med Oracle Developer VM

  4. Åtkomst nekad för användaren 'root'@'localhost'