sql >> Database teknologi >  >> RDS >> Mysql

hvordan man bestiller et JSON-svar baseret på databaseforhold ved hjælp af veltalende

Din forventede JSON viser foods som et barn af portions . For at gøre dette skal du konfigurere denne relation.

På din Portion model, skal du opsætte følgende forhold:

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

Med denne relationsopsætning kan du nu få dine data sådan her:

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

Dette vil indlæse dine fødevaregrupper, derefter vil det indlæse portionerne i fødevaregrupperne, og så vil det indlæse fødevarerne i portionerne.

Rediger

Jeg har muligvis misforstået dit spørgsmål lidt. Jeg gik ud fra, at du havde en portions relation defineret på \App\FoodGroup . Hvis ikke, kan du tilføje dette sådan:

Fødevaregruppe:

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

Rediger 2

Denne løsning er lidt hacky, fordi den behandler foods bord som et pivotbord, selvom det ikke var specielt designet til det. På grund af dette er der flere poster i foods tabel, der indeholder de samme nøgleparværdier, og det er derfor, du får duplikatrelaterede modeller.

Hvis du kaster en distinct() på forholdet, bør dette tage sig af problemet, da det vil eliminere de dubletter, der er oprettet fra den indre sammenføjning. Ovenstående kode er blevet ændret.



  1. CRUD-drift med ASP.NET Core MVC, Entity Framework Core og SQL Server

  2. Oracle - Sådan opretter du en materialiseret visning med HURTIG OPDATERING og JOINS

  3. Sådan sender du parameter til mssql-forespørgsel i node js

  4. Få alle forældre til et barn