← voltar

🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação?

🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação?

No ecossistema Laravel, há duas formas principais de interagir com o banco de dados: o Eloquent ORM e o Query Builder. Ambos têm seu espaço, mas entender quando usar cada um é essencial para escrever código limpo, performático e fácil de manter.

Neste artigo, vamos comparar essas duas abordagens, mostrar exemplos reais de uso e apontar os cenários ideais para cada uma delas. Vamos nessa?

O que é o Eloquent?

O Eloquent é o ORM (Object-Relational Mapper) oficial do Laravel. Ele transforma tabelas em classes PHP, permitindo que você trabalhe com os dados como objetos.

Cada model representa uma tabela, e cada instância do model representa uma linha. Por trás das cortinas, o Eloquent é construído sobre o Query Builder, mas com uma interface orientada a objetos.

Exemplo real:

$candidato = Candidato::where('cpf', '123.456.789-00')->first();

Recursos do Eloquent:

  • Relacionamentos (hasMany, belongsTo, etc.)

  • Eventos (creating, updated, etc.)

  • Casts de atributos

  • Accessors e mutators

  • Soft deletes

  • Timestamps automáticos

O que é o Query Builder?

O Query Builder oferece uma forma fluente e segura de construir queries SQL diretamente, sem precisar criar models.

Ele é ótimo para consultas complexas, operações em massa ou quando você precisa de performance e controle granular da query.

Exemplo real:

$relatorio = DB::table('inscricoes')
    ->select('cargo_id', DB::raw('count(*) as total'))
    ->where('status', 'deferido')
    ->groupBy('cargo_id')
    ->get();

Comparativo: Eloquent vs Query Builder

Critério Eloquent Query Builder Retorno Modelos (objetos com métodos) Objetos stdClass Relacionamentos Sim Não Lógica encapsulada Sim Não Eventos (creating, etc.) Sim Não Performance Mais pesado Mais leve e rápido Facilidade para joins Limitada Muito flexível Ideal para CRUDs com lógica de negócio Relatórios, queries otimizadas

Operações CRUD: Exemplos práticos

Criar um registro

Eloquent:
Pedido::create([
    'candidato_id' => 1,
    'tipo' => 'isenção',
    'status' => 'em análise',
]);
Query Builder
DB::table('pedidos')->insert([
    'candidato_id' => 1,
    'tipo' => 'isenção',
    'status' => 'em análise',
]);

Atualizar registros

Atualizar um único registro

Eloquent:

$pedido = Pedido::find(10);
$pedido->status = 'deferido';
$pedido->save();

Query Builder:

DB::table('pedidos')
    ->where('id', 10)
    ->update(['status' => 'deferido']);

Atualização em massa

// Query Builder é mais eficiente nesse caso
DB::table('pedidos')
    ->where('status', 'em análise')
    ->update(['status' => 'indeferido']);

Excluir registros

Eloquent com soft delete:

Candidato::find($id)->delete();

Query Builder direto:

DB::table('candidatos')->where('id', $id)->delete();

Quando usar cada um?

Use Eloquent quando:

  • Trabalhar com entidades de domínio (ex: Usuario, Pedido, Candidato)

  • Precisar de relacionamentos

  • Houver lógica de negócio acoplada ao dado (validações, métodos, regras)

  • Quiser manter o código mais expressivo e OO

Use Query Builder quando:

  • Estiver fazendo consultas com join, groupBy, having, etc.

  • Precisar de performance em consultas de grandes volumes

  • Estiver lidando com scripts administrativos

  • Não houver necessidade de criar um model (ex: relatórios ou dashboard)

Dicas práticas

  • Evite carregar muitos registros com Eloquent se você não for usá-los como objetos. Prefira o Query Builder nesse caso.

  • Use select() no Eloquent para reduzir colunas carregadas:

Candidato::select('id', 'nome')->get();
Para casos híbridos (ex: usar Eloquent mas com joins manuais), você também pode usar:
Pedido::join('candidatos', 'candidatos.id', '=', 'pedidos.candidato_id')
    ->select('pedidos.*', 'candidatos.nome')
    ->get();

O Laravel te dá a liberdade de escolher entre Eloquent e Query Builder dependendo da necessidade. Em geral:

  • Eloquent é ideal para domínio rico, com regras e relacionamentos.

  • Query Builder é melhor para performance, relatórios e manipulação em massa.

A chave está em entender a intenção da operação. Se for sobre um "objeto do seu negócio", Eloquent. Se for só "dados", talvez o Query Builder seja mais adequado.

Fontes e leitura complementar

Comentários (0)

Nenhum comentário ainda. Seja o primeiro.

Continue lendo

Entendendo o Service Container no Laravel

Entendendo o Service Container no Laravel

Quando você trabalha com Laravel, uma das ferramentas mais poderosas sob o capô é o Service Container. Mas o que exatamente isso significa? E como podemos usá-lo no nosso dia a dia sem complicação? Vou explicar isso de…

Artigo, Iniciantes, Intermediários, Laravel, Tutorial
Adicionar e remover classes CSS com Vanilla Javascript

Adicionar e remover classes CSS com Vanilla Javascript

Adicionar e remover classes CSS com JQUERY é uma atividade muito simples, mas também através do javascript puro conseguimos o mesmo efeito e com as mesma simplicidade. Todo elemento do DOM possui uma propriedade…

Artigo, JavaScript, Tutorial