Laravel Query Builder

Laravel
Tempo de leitura: 4 minutos

O Laravel Query Builder é uma interface elegante e poderosa que permite aos desenvolvedores construir e executar consultas SQL de forma programática, sem escrever SQL bruto. Ele atua como uma camada de abstração que simplifica o acesso ao banco de dados, oferece segurança contra injeções de SQL (graças ao uso automático de bindings) e melhora a legibilidade e manutenção do código.

Este artigo detalha as principais funcionalidades do Query Builder, desde filtros básicos até operações avançadas como Joins e Unions.

1. ⚙️ Estrutura e Recuperação Básica

Toda consulta começa com a Facade DB e o método table('nome_tabela'), que retorna uma instância do construtor de consultas.

A. Selecionando a Tabela

PHP

use Illuminate\Support\Facades\DB;

// Cria o construtor para a tabela 'users'
$query = DB::table('users'); 

// Executa a consulta SELECT * FROM users
$users = $query->get(); 

O método get() executa a consulta e retorna um objeto Collection contendo os resultados como objetos anônimos (stdClass).

B. Especificando Colunas (select)

Use select() para especificar as colunas que você deseja buscar, o que é crucial para performance.

PHP

// SELECT id, name, email FROM users
$users = DB::table('users')->select('id', 'name', 'email')->get();

Você também pode usar SQL Bruto com o método DB::raw() (com cautela):

PHP

// SELECT COUNT(*) as total_users FROM users
$users = DB::table('users')
            ->select(DB::raw('COUNT(*) as total_users'))
            ->get();

2. 🧩 Cláusulas de Filtro (where)

As cláusulas where são usadas para filtrar os resultados (equivalente à cláusula WHERE do SQL).

A. Filtros Simples e Comuns

MétodoEquivalente SQLExemplo
whereWHERE status = 'active'where('status', 'active')
whereWHERE votes > 100where('votes', '>', 100)
whereInWHERE id IN (1, 2, 3)whereIn('id', [1, 2, 3])
whereBetweenWHERE votes BETWEEN 10 AND 100whereBetween('votes', [10, 100])

B. Cláusulas OR e Agrupamento

Para agrupar cláusulas WHERE de forma complexa (ex: WHERE A OR (B AND C)), você passa uma Closure para o método orWhere ou where.

PHP

$users = DB::table('users')
    ->where('status', 'active') // WHERE status = 'active'
    ->orWhere(function ($query) {
        $query->where('votes', '>', 100)  // AND (votes > 100
              ->where('country', 'US');   // AND country = 'US')
    })->get();

3. 🤝 Joins (Uniões)

O Query Builder suporta todos os tipos de Joins, permitindo que você combine dados de múltiplas tabelas.

A. Inner Join (Padrão)

Retorna apenas os registros onde há correspondência em ambas as tabelas.

PHP

// SELECT orders.*, users.name as user_name FROM orders 
// INNER JOIN users ON orders.user_id = users.id
$orders = DB::table('orders')
    ->join('users', 'orders.user_id', '=', 'users.id')
    ->select('orders.*', 'users.name as user_name')
    ->get();

B. Left Join

Retorna todos os registros da tabela da esquerda e os registros correspondentes da direita (NULL onde não houver correspondência).

PHP

$products = DB::table('products')
    ->leftJoin('categories', 'products.category_id', '=', 'categories.id')
    ->select('products.*', 'categories.name as category_name')
    ->get();

C. Unions

O método union() combina os resultados de duas consultas separadas (exigindo que as colunas selecionadas sejam as mesmas).

PHP

$activeUsers = DB::table('users')->where('status', 'active');
$usUsers = DB::table('users')->where('country', 'US');

// Combina os resultados, removendo duplicatas
$users = $activeUsers->union($usUsers)->get(); 

4. ✍️ Modificações de Dados (C.U.D)

A. Insert

O método insert() pode ser usado para inserir um ou múltiplos registros.

PHP

DB::table('users')->insert([
    'name' => 'John Doe',
    'email' => '[email protected]',
    'created_at' => now(), // Helpers de data/hora
    'updated_at' => now(),
]);

B. Update

O método update() é usado após uma ou mais cláusulas where.

PHP

DB::table('users')
    ->where('id', 1) // Filtro
    ->update(['votes' => 10, 'updated_at' => now()]); // Dados a atualizar

C. Delete e Truncate

O método delete() é usado para remover registros específicos, enquanto truncate() limpa a tabela inteira e reseta o auto-incremento.

PHP

// DELETE FROM users WHERE votes = 0
DB::table('users')->where('votes', 0)->delete(); 

// Exclui todos os registros e reseta o auto-incremento (rápido)
DB::table('logs')->truncate(); 

5. 📄 Paginação

O Query Builder suporta a paginação de resultados diretamente através do método paginate().

PHP

public function searchUsers(Request $request)
{
    $query = DB::table('users');

    // Aplica filtros dinâmicos
    if ($request->has('name')) {
        $query->where('name', 'like', '%' . $request->input('name') . '%');
    }

    // Retorna um Paginator com 10 resultados por página
    $users = $query->paginate(10); 

    return view('users.index', compact('users'));
}

✅ Conclusão Laravel Query Builder

Laravel Query Builder: É uma ferramenta essencial para construir queries de banco de dados de forma segura e expressiva. Embora o Eloquent ORM seja ideal para interações baseadas em objetos, o Query Builder oferece a flexibilidade e o controle de desempenho necessários para consultas diretas e complexas (como Joins e Unions), garantindo que seu código seja limpo, manutenível e protegido contra vulnerabilidades.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.