
🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação?
No ecossistema Laravel, há duas formas principais de interagir com o banco de dados: o Eloquent ORM e o Query... 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 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.
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 ecossistema Laravel, há duas formas principais de interagir com o banco de dados: o Eloquent ORM e o Query... Leia mais
O Laravel é um dos frameworks de desenvolvimento web mais populares e poderosos em uso atualmente. Ele tem muitas características... Leia mais
Elixir é uma linguagem de programação dinâmica e funcional, desenvolvida por José Valim em 2011, projetada para construir aplicações escaláveis... Leia mais
Hoje boa parte dos banco de dados relacionais podem armazenar campos com valores no formato JSON o que garante maior... Leia mais