Laravel Query Builder

Laravel
Tempo de leitura: 4 minutos

O Laravel Query Builder é uma interface fluente e poderosa para interagir com o banco de dados da sua aplicação. Ele oferece uma alternativa ao Eloquent ORM para construir consultas SQL de forma programática, sem a necessidade de escrever SQL bruto diretamente. Isso torna o código mais legível, manutenível e seguro, prevenindo injeções de SQL.

Este artigo explora em detalhes o laravel query builder, desde a execução de consultas básicas até operações mais complexas como joins e unions.

Executando Consultas no Banco de Dados

Para começar a usar o Query Builder, você precisa usar a Facade DB e o método table() para especificar a tabela com a qual deseja interagir:

PHP

use Illuminate\Support\Facades\DB;

$users = DB::table('users')->get();

O método get() executa a consulta e retorna um Collection com os resultados.

Select

O método select() permite especificar as colunas que você deseja recuperar:

PHP

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

// Usando expressões SQL brutas
$users = DB::table('users')->select(DB::raw('COUNT(*) as total_users'))->get();

Joins

O Query Builder oferece suporte a diferentes tipos de joins:

  • Inner Join:

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

PHP

$orders = DB::table('orders')->join('users', 'orders.user_id', '=', 'users.id')->select('orders.*', 'users.name as user_name')->get();
  • Left Join:

Retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se não houver correspondência, os valores da tabela da direita serão null.  

PHP

$products = DB::table('products')->leftJoin('categories', 'products.category_id', '=', 'categories.id')->select('products.*', 'categories.name as category_name')->get();
  • Right Join: Similar ao Left Join, mas retorna todas as linhas da tabela da direita.
  • Cross Join: Retorna o produto cartesiano das duas tabelas.

Unions

O método union() permite combinar os resultados de duas ou mais consultas:

PHP

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

$users = $firstQuery->union($secondQuery)->get();

Para remover linhas duplicadas, utilize unionAll():

PHP

$users = $firstQuery->unionAll($secondQuery)->get();

Cláusulas Where

As cláusulas where são usadas para filtrar os resultados da consulta:

PHP

$users = DB::table('users')->where('status', '=', 'active')->get();

// Outras variações
$users = DB::table('users')->where('votes', '>', 100)->get();
$users = DB::table('users')->where('name', 'like', '%John%')->get();
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = DB::table('users')->whereBetween('votes', [10, 100])->get();

// Cláusulas where mais complexas
$users = DB::table('users')
    ->where('status', 'active')
    ->orWhere(function ($query) {
        $query->where('votes', '>', 100)
              ->where('country', 'US');
    })->get();

Insert

O método insert() permite inserir novos registros na tabela:

PHP

DB::table('users')->insert([
    'name' => 'John Doe',
    'email' => '[email protected]',
    'password' => Hash::make('password'),
]);

// Inserindo múltiplos registros
DB::table('users')->insert([
    ['name' => 'Jane Doe', 'email' => '[email protected]'],
    ['name' => 'Peter Pan', 'email' => '[email protected]'],
]);

Update

O método update() permite atualizar registros existentes:

PHP

DB::table('users')
    ->where('id', 1)
    ->update(['votes' => 10]);

Delete

O método delete() permite excluir registros:

PHP

DB::table('users')->where('id', 1)->delete();

// Excluindo todos os registros da tabela
DB::table('users')->truncate();

Exemplo Completo: Buscando Usuários com Filtros e Paginação

PHP

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

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

    if ($request->has('name')) {
        $query->where('name', 'like', '%' . $request->input('name') . '%');
    }

    if ($request->has('email')) {
        $query->where('email', $request->input('email'));
    }

    $users = $query->paginate(10); // Paginação com 10 resultados por página

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

Neste exemplo, demonstramos como construir uma consulta dinâmica com base nos parâmetros da requisição e como usar a paginação para exibir os resultados de forma organizada.

Conclusão

O laravel query builder oferece uma maneira flexível e expressiva de interagir com o banco de dados. Ele permite construir consultas complexas de forma programática, mantendo o código limpo e seguro. Dominar o Query Builder é essencial para qualquer desenvolvedor Laravel que deseja ter controle total sobre as consultas SQL da sua aplicação.

Com os exemplos e explicações apresentados neste artigo, você está pronto para começar a utilizar o Query Builder em seus projetos e construir aplicações mais robustas e eficientes. Lembre-se que, para operações mais complexas e que envolvam modelagem de dados, o Eloquent ORM pode ser uma opção mais adequada, mas o Query Builder é uma ferramenta valiosa para consultas diretas e personalizadas.

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

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