Tu JSON esperado muestra foods
como hijo de portions
. Para hacer esto, debe configurar esta relación.
En tu Portion
modelo, debe configurar la siguiente relación:
public function foods() {
return $this->hasMany(Food::class);
}
Con esta configuración de relación, ahora puede obtener sus datos de esta manera:
$categories = App\FoodGroup::with('portions.foods')->get();
Esto cargará sus grupos de alimentos, luego cargará las porciones en los grupos de alimentos y luego cargará los alimentos en las porciones.
Editar
Puede que haya leído un poco mal tu pregunta. Supuse que tenías portions
relación definida en \App\FoodGroup
. Si no, puedes agregar esto así:
Grupo Alimenticio:
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();
}
Editar 2
Esta solución es un poco complicada porque está tratando los foods
table como una mesa dinámica, aunque no fue diseñada específicamente para eso. Debido a esto, hay varias entradas en foods
tabla que contiene los mismos valores de par de claves, y es por eso que obtiene modelos relacionados duplicados.
Si lanzas un distinct()
sobre la relación, esto debería solucionar el problema, ya que eliminará los duplicados creados a partir de la unión interna. El código anterior ha sido modificado.