sql >> Databáze >  >> RDS >> Mysql

jak objednat odpověď JSON na základě vztahu databáze pomocí výmluvného

Váš očekávaný JSON zobrazuje foods jako potomek portions . Chcete-li to provést, musíte tento vztah nastavit.

Na vaší Portion modelu, musíte nastavit následující vztah:

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

S tímto nastavením vztahu nyní můžete získat svá data takto:

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

Tím se načtou skupiny potravin, poté se načtou porce do skupin potravin a poté se načtou potraviny do porcí.

Upravit

Možná jsem si trochu špatně přečetl vaši otázku. Předpokládal jsem, že máte portions vztah definovaný na \App\FoodGroup . Pokud ne, můžete to přidat takto:

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

Upravit 2

Toto řešení je trochu nešikovné, protože zpracovává foods tabulka jako kontingenční tabulka, i když pro to nebyla speciálně navržena. Z tohoto důvodu je v foods více položek tabulky, které obsahují stejné hodnoty páru klíčů, a to je důvod, proč získáváte duplicitní související modely.

Pokud vyvoláte distinct() na vztah by to mělo vyřešit problém, protože to odstraní duplikáty vytvořené z vnitřního spojení. Výše uvedený kód byl změněn.



  1. Jak vytvořit dotaz bez ohledu na velikost písmen v Postgresql?

  2. SQL Server TempDB Monitoring pomocí Dynamic Management Views (DMV)

  3. Docker Nelze se připojit k neběžícímu kontejneru

  4. SQLException:Porušení protokolu. Problém s ovladačem Oracle JDBC