PauloRB.dev

Desenvolvedor de Software

🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação? | PauloRB.dev 🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação? – PauloRB.dev
🔍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

Mais Posts

Definindo o Ano Atual como Valor Padrão em Migrations do Laravel

Definindo o Ano Atual como Valor Padrão em Migrations do Laravel

Ao trabalhar com migrations no Laravel, uma tarefa comum é definir valores padrão para colunas em tabelas de banco de... Leia mais

Como resolver o erro “oauth-private.key does not exist or is not readable” no Laravel

Como resolver o erro “oauth-private.key does not exist or is not readable” no Laravel

O Laravel Passport é uma biblioteca que trabalha com o padrão OAuth2 e fornece uma implementação completa do servidor OAuth2.... Leia mais

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

Como Unir Múltiplos Arquivos PDF em um Único Documento Usando Python

No dia a dia, muitas vezes nos deparamos com a necessidade de unir vários arquivos PDF em um único documento.... Leia mais

Como Atualizar Valores de Chaves em Campos JSON no PostgreSQL

Como Atualizar Valores de Chaves em Campos JSON no PostgreSQL

Atualizar valores em um campo JSON no PostgreSQL é uma operação comum ao trabalhar com dados semi-estruturados. Isso é especialmente... Leia mais