get relation count
[Concluído]
Mestre Carlos, tudo bem amigo?
Me tire uma dúvida sobre contagem de registros nos relacionamentos.
Tenho uma instituição hasMany projetos, e outra relação projetos belongsToMany equipes, nessa claro, com tabela intermediária.
Meu problema é contar a equipe de cada projeto nessa situação abaixo:
$institutions = $this->institutions::with(['projects.teams'])->limit(3)->get();
no foreach ($institutions as $institution), eu pego a contagem dos projetos: institution->projects->count() - então consigo o total de projetos.
mas a contagem da equipe de cada projeto: $institution->projects->teams->count() - dá erro
Por favor, me oriente como posso resolver essa questão?
Grato pela atenção!
Abraço!
Olá, Jackson!
Tudo bem, e com vc?
Aqui dá erro porque é uma relação 1:N -> N:N
$institution->projects->teams->count()
Em $institution->projects é uma collection, por isso não consegue acessar apenas um item da collection, você só conseguiria assim:
foreach ($institution->projects as $projects) {
foreach ($projects->teams as $team) {
{{ $team->count() }}
}
}
--
No seu caso, você precisa mostrar o total de teams por projeto, ou total por institutions?
Se for por institutions, você pode recuperar diretamente do model teans filtrando por institutions, e já passar para a view o total.
Pegou a ideia amigo?
Seria o total de team por project, pq a relação do team é somente com o project
Usa o método withCount: https://laravel.com/docs/9.x/eloquent-relationships#counting-related-models
Tbm não consegui com o withCount.
Pq tenho um loop q mostra 3 instituições, e dentro desse loop eu mostro a quantidade de projetos (funciona pois instituição e projeto se relacionam), e tbm queria mostrar o total de equipe desses projetos, ou seja, se uma instituição tem 2 projetos, e um projeto tem 5 pessoas e o outros 3 pessoas, queria mostrar um total 8 pessoas.
Mas dentro de um loop do model instituição q não se relaciona com equipe, não está dando certo.
Grato pela resposta!
Você consegue fazer o count dentro do loop, igual no primeiro exemplo que enviei, assim:
@foreach ($institution->projects as $projects)
@foreach ($projects->teams as $team)
{{ $team->count() }}
@endforeach
@endforeach
Meu amigo Carlos, obrigado pela atenção e paciência.
Dessa forma fazendo um loop, faz contagem de todas as equipes, repetindo com o número de projetos.
Vc pode ver nessa imagem https://jlemos.com.br/imgs/capturatela.png
A ideia é listar somente as instituições, e mostrar o total de projetos e total das equipes.
Acredito q a solução nesse meu caso seria tbm relcionar a equipe a instituição.
Pode sempre contar comigo.
O grande ponto nesse caso é o relacionamento entre projetos e teams, como é uma relação N:N pega um pouco.
Uma alternativa para esse caso, seria por exemplo trazer os resultados já todos formatados do SQL, já trazendo esse count de teams, entende?
Outra alternativa (não muito interessante, seria usar um if):
@foreach ($institution->projects as $projects)
@foreach ($projects->teams as $team)
@if ($loop->first)
{{ $team->count() }}
@endif
@endforeach
@endforeach
$loop->first seria uma solução apesar do foreach rs, mas a alternativa via SQL é bacana.
Obrigado amigo!
Abraço
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!