PauloRB.dev

Desenvolvedor de Software

Laravel: Trabalhando com whereHas e with de forma simples | PauloRB.dev Laravel: Trabalhando com whereHas e with de forma simples - PauloRB.dev
Laravel: Trabalhando com whereHas e with de forma simples

Laravel: Trabalhando com whereHas e with de forma simples

Quando trabalhamos com Eloquent no Laravel, frequentemente precisamos realizar consultas baseadas em relacionamentos entre modelos. Para isso, o Laravel oferece dois métodos bastante poderosos: whereHas e with. Neste artigo, vou explicar como utilizá-los de forma prática, para você fazer consultas mais eficientes e otimizadas no seu projeto.

O que é o whereHas?

O método whereHas é utilizado quando você quer filtrar resultados com base em uma condição aplicada a um relacionamento. Vamos imaginar um cenário simples: você tem dois modelos, User e Post, onde um usuário pode ter vários posts. Agora, você precisa buscar apenas os usuários que têm posts com o status “aprovado”. O whereHas faz exatamente isso!

Aqui vai um exemplo básico:

$usersWithApprovedPosts = User::whereHas('posts', function ($query) {
    $query->where('status', 'approved');
})->get();

O que acontece aqui? Basicamente, estamos dizendo: “Ei, me traga todos os usuários que têm posts aprovados”. Assim, o Laravel vai filtrar os usuários para retornar apenas aqueles que atendem a essa condição.

E o with?

Enquanto o whereHas filtra os resultados com base no relacionamento, o método with é usado para carregar os relacionamentos de forma otimizada, evitando o problema de N+1 queries. Traduzindo para o nosso exemplo, se você quiser buscar todos os usuários e já trazer os posts de cada um, o with entra em cena.

Olha só como isso fica simples:

$usersWithPosts = User::with('posts')->get();

Aqui, o Laravel vai trazer os usuários e os posts relacionados de uma vez só, economizando muitas consultas desnecessárias ao banco de dados.

Combinando whereHas com with

Agora, o melhor dos dois mundos: você pode combinar o whereHas com o with para filtrar e carregar os relacionamentos ao mesmo tempo. No exemplo abaixo, além de filtrar os usuários que têm posts aprovados, já vamos trazer esses posts para evitar outra consulta:

$usersWithApprovedPosts = User::whereHas('posts', function ($query) {
    $query->where('status', 'approved');
})->with('posts')->get();

Isso é muito útil em cenários onde você quer garantir que só os usuários com determinado tipo de post sejam retornados, e já trazer os posts relacionados de uma vez. Sem contar que essa abordagem economiza performance e deixa o código bem mais limpo.

Por que isso é importante?

Na prática, utilizar whereHas e with juntos pode reduzir bastante o número de consultas ao banco de dados, principalmente quando você lida com grandes volumes de dados e relacionamentos complexos. Além disso, essas técnicas ajudam a manter o código mais organizado, sem precisar fazer um loop manual para carregar os relacionamentos.

Conclusão

O Laravel facilita muito o trabalho com relacionamentos no Eloquent, e usar bem o whereHas e with é fundamental para consultas eficientes. Quando você precisa filtrar por um relacionamento e já carregar esses dados em uma única consulta, a combinação dessas duas ferramentas vai te salvar de muitos problemas com performance.

Se você ainda não está usando essas técnicas no seu projeto, está na hora de testar e perceber a diferença que isso pode fazer!

Este artigo é uma sintese do artigo : Laravel WhereHas() and With() e você pode acessar através do link : https://dev.to/othmane_nemli/laravel-wherehas-and-with-550o

Mais Posts

Um resumo sobre o WSL2

Um resumo sobre o WSL2

O WSL 2 (Windows Subsystem for Linux) representa um grande avanço na integração entre o Windows e o Linux, permitindo... Leia mais

Testando o envio de mensagens de email usando Laravel

Testando o envio de mensagens de email usando Laravel

Enviar mensagens de email é uma parte essencial de muitas aplicações web, e o Laravel, um popular framework PHP, torna... Leia mais

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

No dia a dia, muitas vezes nos deparamos com a necessidade de unir vários arquivos PDF em um único documento.... Leia mais

Habilitar Sudo no Debian e seus derivados

Habilitar Sudo no Debian e seus derivados

Por padrão o debian não trás o sudo habilitado como estamos acostumados no Ubuntu e outro de seus derivados como... Leia mais