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

come ordinare una risposta JSON in base alla relazione con il database utilizzando eloquent

Il tuo JSON previsto mostra foods come figlio di portions . Per fare ciò, devi impostare questa relazione.

Sulla tua Portion modello, è necessario impostare la seguente relazione:

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

Con questa configurazione della relazione, ora puoi ottenere i tuoi dati in questo modo:

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

Questo caricherà i tuoi gruppi di alimenti, quindi caricherà le porzioni nei gruppi di alimenti e quindi caricherà gli alimenti nelle porzioni.

Modifica

Forse ho letto leggermente male la tua domanda. Ho pensato che avessi un portions relazione definita su \App\FoodGroup . In caso contrario, puoi aggiungere questo in questo modo:

Gruppo alimentare:

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

Modifica 2

Questa soluzione è un po' complicata perché tratta i foods table come tabella pivot, sebbene non sia stata progettata specificamente per questo. Per questo motivo, ci sono più voci in foods tabella che contiene gli stessi valori di coppia di chiavi, ed è per questo che ottieni modelli correlati duplicati.

Se lanci un distinct() sulla relazione, questo dovrebbe risolvere il problema, poiché eliminerà i duplicati creati dall'unione interna. Il codice sopra è stato modificato.