Formas de Paginação de Dados no Laravel
No desenvolvimento de aplicações web, a paginação de dados é um recurso fundamental quando se trabalha com grandes volumes de... Leia mais
Desenvolvedor de Software
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.
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.
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.
whereHas com withAgora, 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.
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.
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
No desenvolvimento de aplicações web, a paginação de dados é um recurso fundamental quando se trabalha com grandes volumes de... Leia mais
Introdução ao SQLite O SQLite é um sistema de banco de dados leve, sem servidor e autocontido, amplamente utilizado em... Leia mais
Ao criar um Pull Request, é comum perceber depois que um arquivo foi modificado por engano ou não deveria estar... Leia mais
O Design Pattern Facade é uma solução elegante para simplificar a interface de um subsistema complexo, tornando-o mais fácil de... Leia mais