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

A função WITH RECURSIVE no PostgreSQL

A função WITH RECURSIVE no PostgreSQL

A função WITH RECURSIVE no PostgreSQL é uma ferramenta poderosa para a execução de consultas recursivas em bancos de dados.... Leia mais

Como iniciar, parar e reiniciar o Apache Web Server no Linux

Como iniciar, parar e reiniciar o Apache Web Server no Linux

Comandos  para controlar o funcionamento do apache em ambientes de desenvolvimento locais: Estes Comandos Servem para ambientes Ubuntu/Debian: Leia mais

Tutorial: Exportando Imagens Base64 Usando Laravel Excel

Tutorial: Exportando Imagens Base64 Usando Laravel Excel

Neste tutorial, vamos aprender como exportar uma lista de cadastros de clientes para uma planilha Excel, incluindo as fotos dos... Leia mais

Collections no PHP e seu uso no Laravel

Collections no PHP e seu uso no Laravel

Ao desenvolver aplicações modernas com PHP, uma das tarefas mais comuns é manipular arrays — filtrando, transformando ou agrupando dados.... Leia mais