Posted on: October 05, 2021 11:54 AM
Posted by: Renato
Views: 8383
Usando Joins em Consultas do Laravel Eloquent
Os aplicativos Laravel que dependem fortemente da interação do banco de dados usando o Laravel Eloquent freqüentemente criam problemas de desempenho.
Para melhorar o desempenho de sua aplicação, você deve refatorar suas consultas e ficar de olho nas consultas que consomem memória usando o ORM como o Laravel Eloquent.
Neste post, vou mostrar um exemplo muito simples para refatorar uma consulta e melhorar o tempo de resposta do banco de dados.
Problema
Considere o código de exemplo abaixo, que usa a tabela Produto e Categoria para retornar o nome da categoria.
$product = Product::where('id', $productId)->first(); $productCategory = Category::where('id', $product->category_id)->pluck('name')->first();
O exemplo de código acima é simples de entender, mas usa duas chamadas separadas para o banco de dados. A primeira consulta deve retornar antes que a segunda possa ser acionada.
Solução
Vamos melhorar este exemplo de código combinando as duas solicitações em uma única consulta.
$productCategory = Product::where('id', $productId) ->leftJoin('category', 'product.category', '=', 'category.id') ->select('product.id','category.name')->first();
Agora, o que acabamos de fazer acima?
- Em primeiro lugar, direcionamos o produto com base na
productId
mesma consulta que a primeira. - A seguir, juntamos os resultados com a tabela de categorias usando a
category
categoria do produto. A primeira consulta pegou o modelo de produto que nos fornece o acesso ao atributo da categoria. - Selecionamos a id do produto e o nome da categoria.
- Por fim, usamos o
first()
método, que garante que, assim que encontrar uma única categoria que atenda ao requisito, ele retornará o nome da categoria instantaneamente.
É isso. Você sabe que tem um melhor entendimento de como funciona a junção à esquerda e pode combinar a consulta para fazer uma única solicitação ao banco de dados. Parece bastante simples, mas usando o mesmo método, você pode otimizar as consultas complexas que lidam com várias tabelas.
Se você tiver algum comentário ou sugestão, ou encontrar algum erro, por favor me avise enviando um comentário abaixo.
Donate to Site
Renato
Developer