Daniel Drummond
Criador Daniel Drummond 06/10/2021

Não sei se estou fazndo da forma correta, pq só recebo os IDs da tabela de apoio e não os itens da tabela relacionada.

Tenho 4 tabelas, Companies, Branches, Clients e Locations e preciso fazer o seguinte relacionamento.

A tabela Branches tem que ter um relacionamento com a table Company (Uma Companies pode ter várias Branches (OneToMany) mas uma Branch só pode ter uma Company), ainda na tabela Branches tem que ter um relacionamento com a tabela Locations (uma Branch só pode ter uma Location (OneToMany), porque uma Location pode ter várias Branches).

Agora na tabela Clients preciso ter um relacionamento com a tabela Branches, onde uma Branch pode ter vários Clients e um Client pode ter varias Branches.

Como falei não sei se estou fazendo corretamente o meu código. Vou disponibiliza-lo abaixo:

Criador Daniel Drummond 06/10/2021

Model Company

public function branches()
{
  return $this->hasMany(Branch::class);
}
Model Branch
public function company()
{
return $this->belongsTo(Company::class);
}

public function location()
{
return $this->belongsTo(Location::class);
}
public function clients()
{
return $this->belongsToMany(Client::class);
}
Daniel Drummond
Criador Daniel Drummond 06/10/2021

Model Location

public function branches()
{
  return $this->hasMany(Branch::class);
}

Model CLient
public function branches()
{
  return $this->belongsToMany(Branch::class);
}
 
Como falei tenho uma tabela de apoio branch_client com branch_id e client_id para fazer o relacionamento many to many entre branches e clients, só que só recebo os IDs desta tabela. Segue abaixo o method show, onde quero aparesentar os resultados.
Daniel Drummond
Criador Daniel Drummond 06/10/2021

BranchController.php

public function show($id)
{
$branch = $this->repository->find($id);
$clients = $branch->clients;
$companies = Company::all();
$locations = Location::all();

if (!$branch)
return redirect()->back();

return view('branch.show', compact('branch', 'companies', 'locations', 'clients'));
}

Sei que não é a melhor forma, mas no caso da Company e Location, estou fazendo a lógica no tamplate show.blade.php
Daniel Drummond
Criador Daniel Drummond 06/10/2021

E quero fazer o mesmo para o show.blade.php, só que mostrar as branches relacionadas a esse client. Só que não estou conseguindo obter os resultados. Só tenho o retorno dos IDs da tabela de apoio.

Daniel Drummond
Manager Carlos Ferreira 06/10/2021

Olá, Daniel!
Tudo bem?

Você tem o MER do banco de dados? (print: https://uploaddeimagens.com.br/)

Tem o código no GitHub? Fica mais fácil para mim ter uma visão melhor dos relacionamentos.

---

Você pode reduzir a quantidade de consultas ao banco, se usar o método with para buscar os relacionamentos entre as tabelas (definidos nos models):
$branch = $this->repository->with(['company.branches', 'location', 'clients'])->find($id);

---

Dica de próximo curso: https://academy.especializati.com.br/curso/laravel-api-com-cache

Carlos Ferreira
Criador Daniel Drummond 06/10/2021

Oi Carlos,

Vou fazer o update do projeto no Github e te passo o link, vou ver esse curso tb. Obrigado

Daniel Drummond
Criador Daniel Drummond 06/10/2021

O que quer dizer com MER do banco de dados? kkkk

Daniel Drummond
Manager Carlos Ferreira 06/10/2021

Seria a estrutura das tabelas e relacionamento entre elas, algo assim: https://www.next4.com.br/wp-content/uploads/MER_SISTEMASWEB-1.png

Carlos Ferreira
Criador Daniel Drummond 06/10/2021

Oi Carlos,

Subi no Github. Não achei a appliacar a sua sugestão, não consgui mexer nele hoje, só mais tarde.

Obrigado

Pode acessar aqui:

https://github.com/Drummond-Dev/controle

Daniel Drummond
Criador Daniel Drummond 06/10/2021

Carlos, obrigado.

 

Consegui colcoar para funcionar utilizando a sua sugestão. Apliquei nas Branches e agora vou tentar nos Clients.

Daniel Drummond
Manager Carlos Ferreira 06/10/2021

Qual o problema com Clients mesmo? Não está conseguindo puxar eles? Tem algum erro?
Me passa mais detalhes por favor :)

Carlos Ferreira
Criador Daniel Drummond 06/10/2021

Oi Carlos,

Não tive problema em aplicar o mesmo conceito para os clientes, agora está tudo funcionando corretamente. Obrigado mais uma vez pela ajuda.

Daniel Drummond
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!