Votre JSON attendu affiche foods
en tant qu'enfant de portions
. Pour ce faire, vous devez configurer cette relation.
Sur votre Portion
modèle, vous devez configurer la relation suivante :
public function foods() {
return $this->hasMany(Food::class);
}
Avec cette configuration de relation, vous pouvez maintenant obtenir vos données comme ceci :
$categories = App\FoodGroup::with('portions.foods')->get();
Cela chargera vos groupes d'aliments, puis il chargera les portions dans les groupes d'aliments, puis il chargera les aliments dans les portions.
Modifier
J'ai peut-être un peu mal lu votre question. J'ai supposé que vous aviez des portions
relation définie sur \App\FoodGroup
. Sinon, vous pouvez ajouter ceci comme suit :
Groupe d'aliments :
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();
}
Modifier 2
Cette solution est un peu bidouilleuse car elle traite les foods
table comme un tableau croisé dynamique, bien qu'il n'ait pas été spécifiquement conçu pour cela. Pour cette raison, il y a plusieurs entrées dans les foods
table contenant les mêmes valeurs de paires de clés, et c'est pourquoi vous obtenez des modèles associés en double.
Si vous lancez un distinct()
sur la relation, cela devrait résoudre le problème, car cela éliminera les doublons créés à partir de la jointure interne. Le code ci-dessus a été modifié.