Open ronicec opened 7 years ago
O problema é que tabelaB não é um item e sim uma coleção de itens, então vc não pode fazer ->tabelaB->tabelaC
.
O que você quer se chama with
.
$result = TabelaA::with(['tabelaB', 'tabelaC'])->find($id_a);
@deleugpn Agradeço a sua ajuda, porém ele me retornou os dados da tabela A e B os dados da tabela C não foi retornado..
Até então o resultado que tive foi:
"result": {
"id": 447,
"name": "TABELA A",
"created_at": "2017-04-18 12:20:20",
"updated_at": "2017-04-18 12:47:15",
"deleted_at": null,
"tabelaB": [
{
"id": 7776,
"name": "DADOS B",
"created_at": "2017-04-18 11:20:37",
"updated_at": "2017-04-18 11:20:37",
"deleted_at": null,
"pivot": {
"id": 447,
"id": 7776
}
}
]
}
Os dados da tabela C não vieram, porque?
Você precisa adicionar no modelo da Tabela A
um hasManyThrough
que aponta para o modelo C através do Modelo B.
@deleugpn Pera, não consegui compreender.. hahahah Teria como você me dar um exemplo?
Obrigadoo!
Olá, @ronicec! Aproveitando a resposta do nosso amigo @deleugpn, dê uma olhada na documentação do Laravel: https://laravel.com/docs/5.4/eloquent-relationships#has-many-through
@deleugpn,
O exemplo de @ronicec não funcionado, pois o with retorna apenas os relacionamento definidos no model utilizando.
O método belongsToMany retorna dados de uma para outra apenas utilizando a tabela intermediária como "ponte"
Por exemplo:
class TabelaA extends Model{ public function tabelaC(){ return $this->belongsToMany('TabelaC', 'nome_da_tabela_intermediaria') } // Nome da tabela intermediária seria a TabelaB }
Há duas maneiras para solucionar esta questão, seria definindo o relacionamento acima, ou utilizando no with.
No with ficaria da seguinte maneira: TabelaA::with(['tabelaB.tabelaC'])->find($seuID);
Lembrando que para o with funcionar corretamente, no model da TabelaB deve existir o método "tabelaC", que deve fazer o seu relacionamento correspondente a tabela.
O with se aplica também quando definido o método tabelaC no model da TabelaA. Ex: TabelaA::with(['tabelaC'])->find($seuID);
Olá galera!!!
Problema Encontrado
Estou com uma dúvida no seguinte ponto. Tenho 3 tabelas:
Tabela A Tabela B (posso ter vários ID da tabela A) Tabela C. (posso ter vários ID da tabela B)
O relacionamento é: A => B => C
Nesse caso para recuperar um item lá na tabela C, eu preciso iniciar pela A, depois passar pela B e assim chegar no resultado da C. O problema é que não eu não quero fazer um select usando JOIN mas sim usando algo mais nativo e mais 'elegante' para retornar esses dados.
Abordagem
Na model da tabela A eu fiz:
Na model da tabela B eu fiz:
Qual que seria a minha ideia: Para retornar um dado da tabela A que tem vinculo até na tabela C ficaria algo:
Mas ai que está o problema ele me retorna o seguinte erro:
Se eu colocar até essa parte:
Funciona ele me retorna no caso os dados da tabela B no caso que tem referencia com a tabela A. Porem com a Tabela C não funciona e da o erro acima.
Agradeço a ajuda!