Como Obter a Query Gerada pelo Eloquent no Laravel 10
Durante o desenvolvimento de aplicações em Laravel, é bastante comum precisar visualizar a consulta SQL gerada pelo Eloquent. Essa prática facilita a depuração de problemas, permite identificar gargalos de desempenho e ajuda na otimização das consultas executadas pelo banco de dados.
Embora o Eloquent abstraia praticamente toda a construção das queries, existem diversas maneiras de visualizar o SQL gerado. Neste artigo você aprenderá as principais técnicas utilizadas por desenvolvedores Laravel para inspecionar consultas e melhorar a performance da sua aplicação.
Utilizando o método toSql()
O método toSql() retorna a consulta SQL que será executada pelo Eloquent. É a forma mais simples de visualizar a estrutura da query.
$query = User::where('status', 'ativo');
echo $query->toSql();
O resultado será semelhante a:
select * from `users` where `status` = ?
Observe que os valores ainda aparecem como parâmetros (?). Isso acontece porque o Laravel utiliza Prepared Statements, aumentando a segurança contra SQL Injection.
Obtendo os parâmetros da consulta
Para visualizar os valores utilizados na consulta, utilize o método getBindings().
$query = User::where('status', 'ativo');
$sql = $query->toSql();
$bindings = $query->getBindings();
dd($sql, $bindings);
O resultado será algo semelhante a:
select * from `users` where `status` = ?
[
"ativo"
]
Dessa forma é possível saber exatamente quais valores estão sendo enviados para o banco.
Registrando todas as consultas com DB::listen()
Quando o objetivo é monitorar todas as consultas executadas pela aplicação, a melhor alternativa é utilizar o método DB::listen().
No arquivo App\Providers\AppServiceProvider.php, adicione o código abaixo dentro do método boot():
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
public function boot()
{
DB::listen(function ($query) {
Log::info($query->sql, $query->bindings);
});
}
Com isso, toda consulta executada será registrada automaticamente no arquivo de log da aplicação.
Visualizando o SQL completo
Em alguns casos pode ser interessante montar uma string contendo a consulta completa, substituindo os parâmetros pelos respectivos valores.
$query = User::where('status', 'ativo');
$sql = vsprintf(
str_replace('?', "'%s'", $query->toSql()),
$query->getBindings()
);
dd($sql);
O resultado será semelhante a:
select * from `users` where `status` = 'ativo'
Essa técnica é muito útil durante a depuração e quando se deseja executar exatamente a mesma consulta diretamente no MySQL ou PostgreSQL.
Utilizando o Laravel Debugbar
Durante o desenvolvimento, uma das ferramentas mais úteis é o Laravel Debugbar. Ele adiciona uma barra no navegador contendo diversas informações sobre a aplicação, incluindo:
- Todas as consultas SQL executadas;
- Tempo gasto em cada consulta;
- Quantidade de queries executadas;
- Uso de memória;
- Tempo total da requisição.
Isso facilita a identificação de problemas como consultas duplicadas (N+1), consultas lentas e operações desnecessárias.
Dicas para otimizar consultas Eloquent
- Utilize
with()para evitar problemas de N+1. - Selecione apenas as colunas necessárias utilizando
select(). - Crie índices nas colunas mais utilizadas em filtros.
- Evite carregar relacionamentos desnecessários.
- Utilize paginação ao invés de carregar milhares de registros.
- Monitore constantemente o tempo das consultas durante o desenvolvimento.
Conclusão
Visualizar a query gerada pelo Eloquent é uma prática indispensável para qualquer desenvolvedor Laravel. Recursos como toSql(), getBindings(), DB::listen() e Laravel Debugbar tornam a depuração muito mais simples e ajudam a identificar gargalos antes que eles afetem o desempenho da aplicação.
Ao incorporar essas técnicas ao seu fluxo de desenvolvimento, você consegue produzir aplicações mais rápidas, escaláveis e fáceis de manter.
Precisa de suporte especializado em Laravel?
A Saldaris Consultoria possui ampla experiência no desenvolvimento e manutenção de aplicações Laravel, incluindo otimização de consultas SQL, análise de desempenho, integração com APIs, desenvolvimento de sistemas corporativos e modernização de aplicações legadas.
Se você ou sua empresa precisam de apoio técnico em projetos Laravel, entre em contato conosco utilizando o formulário abaixo.


