Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como solicitar uma resposta JSON com base no relacionamento do banco de dados usando eloquent


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.