
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
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
A função WITH RECURSIVE no PostgreSQL é uma ferramenta poderosa para a execução de consultas recursivas em bancos de dados.... Leia mais
A escolha entre programação orientada a objetos (OOP) e programação funcional (FP) é mais do que uma preferência de estilo;... Leia mais
Ao realizar estudos de análise de dados ou ao testar sistemas que lidam com grandes volumes de informações, é comum... Leia mais
Se você está começando a aprender Go e quer fazer algo prático, vou te mostrar como criar uma aplicação básica... Leia mais