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.