Quando comecei com Laravel, fiquei perdido entre Eloquent e Query Builder
10/10/2025
Desde que comecei com Laravel, sempre me deparei com tutoriais, projetos e repositórios onde as pessoas usam ( User:: e DB::table() ) de formas diferentes, às vezes até misturando os dois. No começo, confesso, fiquei completamente perdido. Afinal, qual é a diferença real entre Eloquent e Query Builder? E, mais importante, quando devo usar cada um?
Eloquent ORM é o ORM do Laravel. Ele transforma suas tabelas em modelos que se comportam como objetos, permitindo trabalhar com dados de forma orientada a objetos. Por exemplo:
________________________________________________________________
$user = User::where('email', 'teste@email.com')->first();
$user->name = 'Novo Nome';
$user->save();
_________________________________________________________________
Nesse caso, $user é uma instância do modelo User, com métodos, relacionamentos e atributos que podem ter casts, mutators e eventos disparados automaticamente.
Já o Query Builder, usando DB::table(), é mais direto e atua apenas no banco de dados, retornando arrays simples. Ele é ideal para consultas rápidas ou operações complexas que não exigem lógica de modelo. Por exemplo:
_________________________________________________________________
$user = DB::table('users')
->where('email', 'teste@email.com')
->first();
_________________________________________________________________
DB::table('users')
->where('id', $user->id)
->update(['name' => 'Novo Nome']);
_________________________________________________________________
O retorno aqui não é um objeto do tipo User, apenas um objeto genérico com os dados da tabela. Não existem relacionamentos automáticos, casts ou eventos.
Na prática, descobri que cada um tem seu lugar:
Uso Eloquent quando preciso lidar com entidades do domínio, como User, Order ou Product. É ótimo para CRUDs, relacionamentos, regras de negócio e eventos. Ele deixa o código mais limpo e expressivo. Exemplo:
_________________________________________________________________
$user = User::create([
'name' => 'Dias',
'email' => 'dias@teste.com',
'password' => Hash::make('123456'),
]);
_________________________________________________________________
Por outro lado, uso Query Builder quando preciso de consultas rápidas, operações em massa ou quando desempenho é essencial. Também é útil em scripts internos, relatórios ou estatísticas, onde não preciso instanciar modelos. Exemplo:
$stats = DB::table('orders')
->selectRaw('count(*) as total, sum(amount) as revenue')
->where('created_at', '>=', now()->subMonth())
->first();
Aprendi também que é possível misturar os dois de forma estratégica. Posso usar Eloquent para lidar com a lógica de negócio e Query Builder para consultas pesadas, como nos casos abaixo:
$user = User::find($id); // Lógica de negócio
$lastOrders = DB::table('orders')
->where('user_id', $user->id)
->orderBy('created_at', 'desc')
->limit(5)
->get(); // Consulta pesada
No final, a lição que tirei é que Eloquent não substitui Query Builder, nem o contrário. Um é ótimo para clareza e modelagem de domínio, enquanto o outro é essencial para controle e performance em consultas complexas. Saber usar os dois de forma complementar é o que separa um desenvolvedor iniciante de um desenvolvedor experiente em Laravel.