Seu JSON esperado mostra
foods
como filho de portions
. Para fazer isso, você precisa configurar esse relacionamento. Na sua
Portion
model, você precisa configurar o seguinte relacionamento:public function foods() {
return $this->hasMany(Food::class);
}
Com essa configuração de relacionamento, agora você pode obter seus dados assim:
$categories = App\FoodGroup::with('portions.foods')->get();
Isso carregará seus grupos de alimentos, depois carregará as porções nos grupos de alimentos e, em seguida, carregará os alimentos nas porções.
Editar
Posso ter interpretado mal a sua pergunta. Presumi que você tinha
portions
relacionamento definido em \App\FoodGroup
. Se não, você pode adicionar isso assim:Grupo de comida:
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 solução é um pouco complicada porque está tratando os
foods
table como uma tabela dinâmica, embora não tenha sido projetada especificamente para isso. Por causa disso, existem várias entradas no arquivo foods
table que contém os mesmos valores de par de chaves, e é por isso que você está obtendo modelos relacionados duplicados. Se você lançar um
distinct()
no relacionamento, isso deve resolver o problema, pois eliminará as duplicatas criadas a partir da junção interna. O código acima foi modificado.