[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Jackson Lemos Moreira
Criador Jackson Lemos Moreira 08/09/2022

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!

Manager Carlos Ferreira 08/09/2022

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?

Carlos Ferreira
Criador Jackson Lemos Moreira 08/09/2022

Seria o total de team por project, pq a relação do team é somente com o project

Jackson Lemos Moreira
Manager Carlos Ferreira 08/09/2022

Usa o método withCount: https://laravel.com/docs/9.x/eloquent-relationships#counting-related-models

Carlos Ferreira
Criador Jackson Lemos Moreira 08/09/2022

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!

Jackson Lemos Moreira
Manager Carlos Ferreira 08/09/2022

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

Carlos Ferreira
Criador Jackson Lemos Moreira 08/09/2022

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.

 

Jackson Lemos Moreira
Manager Carlos Ferreira 08/09/2022

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

Carlos Ferreira
Criador Jackson Lemos Moreira 08/09/2022

$loop->first seria uma solução apesar do foreach rs, mas a alternativa via SQL é bacana.

Obrigado amigo!

Abraço

Jackson Lemos Moreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!