Laravel Eloquent

Laravel
Tempo de leitura: 5 minutos

Laravel Eloquent: O Eloquent ORM (Object-Relational Mapper) é uma das características mais poderosas e elegantes do Laravel. Ele simplifica drasticamente a interação com o banco de dados, permitindo que você trabalhe com suas tabelas e registros como se fossem objetos PHP. Ao invés de escrever consultas SQL complexas, você utiliza métodos intuitivos e expressivos para realizar operações CRUD (Create, Read, Update, Delete) e muito mais.

Este artigo explora em detalhes o laravel eloquent, desde a geração de models até recursos avançados como escopos de consulta.

Gerando Model Classes

No Laravel, um Model representa uma tabela no seu banco de dados. Para gerar uma nova classe de Model, você pode usar o comando Artisan make:model:

Bash

php artisan make:model User

Este comando criará um arquivo User.php no diretório app/Models. Se você quiser gerar também uma migration, factory, seeder e controller junto com o model, utilize as seguintes opções:

Bash

php artisan make:model Post -mfcs

Onde:

  • -m: Cria uma migration para a tabela correspondente.
  • -f: Cria uma factory para o model.
  • -c: Cria um controller para o model.
  • -s: Cria um seeder para o model.

Convenções Eloquent Model

O Eloquent segue algumas convenções que facilitam o desenvolvimento:

Nome da Tabela: Por padrão, o Eloquent assume que o nome da tabela no banco de dados é o nome do model em snake case e no plural. Por exemplo, o model User corresponde à tabela users. Você pode personalizar o nome da tabela definindo a propriedade $table no model:

PHP

protected $table = 'meus_usuarios';

Chave Primária: O Eloquent assume que a tabela possui uma coluna chamada id como chave primária, do tipo inteiro e auto-incrementável. Você pode personalizar a chave primária definindo a propriedade $primaryKey:

PHP

protected $primaryKey = 'codigo';

Timestamps: Por padrão, o Eloquent espera que a tabela tenha colunas created_at e updated_at para controlar a data de criação e atualização dos registros. Você pode desativar esse comportamento definindo a propriedade $timestamps como false:

PHP

public $timestamps = false;

Conexão: O Eloquent usa a conexão de banco de dados padrão definida no arquivo config/database.php. Você pode especificar uma conexão diferente definindo a propriedade $connection:

PHP

protected $connection = 'mysql2';

Recuperando Resultados do Banco de Dados

O Eloquent oferece diversos métodos para recuperar registros do banco de dados:

  • all(): Retorna todos os registros da tabela:

PHP

$users = User::all();
  • find($id): Retorna o registro com o ID especificado:

PHP

$user = User::find(1);
  • first(): Retorna o primeiro registro da tabela:

PHP

$user = User::first();
  • where($column, $operator, $value): Filtra os registros com base em uma condição:

PHP

$users = User::where('active', 1)->get();
$users = User::where('name', 'like', '%João%')->get();
  • findOrFail($id): Retorna o registro com o ID especificado ou lança uma exceção ModelNotFoundException se o registro não for encontrado:

PHP

$user = User::findOrFail(1);
  • Chunking Results: Para processar milhares de registros sem consumir muita memória, utilize o método chunk():

PHP

User::chunk(100, function ($users) {
	foreach ($users as $user) { 
		// Processa cada grupo de 100 usuários 
	} 
});

Insert e Update

Para inserir um novo registro, você pode criar uma nova instância do Model e atribuir valores aos seus atributos:

PHP

$user = new User;
$user->name = 'Novo Usuário';
$user->email = '[email protected]';
$user->password = bcrypt('senha');
$user->save();

Ou usar o método create():

PHP

User::create([
    'name' => 'Novo Usuário',
    'email' => '[email protected]',
    'password' => bcrypt('senha'),
]);

Para atualizar um registro existente, você pode recuperá-lo, modificar seus atributos e salvar as alterações:

PHP

$user = User::find(1);
$user->name = 'Nome Atualizado';
$user->save();

Ou usar o método update():

PHP

User::where('id', 1)->update(['name' => 'Nome Atualizado']);

Delete

Para deletar um registro, você pode recuperá-lo e usar o método delete():

PHP

$user = User::find(1);
$user->delete();

Ou usar o método destroy():

PHP

User::destroy(1); // Deleta o usuário com ID 1
User::destroy([1, 2, 3]); // Deleta os usuários com IDs 1, 2 e 3
  • Soft Deletes:

O Eloquent oferece suporte a “soft deletes”, que marcam um registro como deletado ao invés de removê-lo fisicamente do banco de dados. Para habilitar o soft delete, adicione a trait SoftDeletes ao seu model e crie a coluna deleted_at na tabela:

PHP

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
    // ...
}

Para recuperar apenas os registros não deletados, use o método withTrashed():

PHP

$users = User::withTrashed()->get();

Para recuperar apenas os registros deletados, use o método onlyTrashed():

PHP

$users = User::onlyTrashed()->get();

Para restaurar um registro deletado, use o método restore():

PHP

$user = User::find(1);
$user->restore();

Escopo das Queries

Os escopos de consulta permitem definir consultas reutilizáveis no seu model. Eles são úteis para encapsular lógica de consulta comum. Para definir um escopo, crie um método com o prefixo scope no seu model:

PHP

class User extends Model
{
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }

    public function scopeSearchByName($query, $name)
    {
        return $query->where('name', 'like', "%$name%");
    }
}

Para usar um escopo, chame o método como se fosse um método estático do model:

PHP

$activeUsers = User::active()->get();
$usersWithNameJoao = User::searchByName('João')->get();

Exemplo Completo: Listando usuários ativos com paginação e busca por nome

PHP

use App\Models\User;
use Illuminate\Http\Request;

Route::get('/usuarios', function (Request $request) {
    $query = User::active();

    if ($request->has('search')) {
        $query->searchByName($request->input('search'));
    }

    $users = $query->paginate(10);
    return view('usuarios.index', compact('users'));
});

Na view resources/views/usuarios/index.blade.php:

Blade

<form action="/usuarios" method="GET">
    <input type="text" name="search" placeholder="Buscar por nome">
    <button type="submit">Buscar</button>
</form>

<ul>
    @foreach ($users as $user)
        <li>{{ $user->name }} - {{ $user->email }}</li>
    @endforeach
</ul>

{{ $users->links() }}

Conclusão

Laravel Eloquent: O laravel eloquent simplifica a interação com o banco de dados, tornando o código mais legível, manutenível e produtivo. Com recursos como convenções, relacionamentos, escopos e soft deletes, o Eloquent oferece uma solução completa para o gerenciamento de dados nas aplicações web que vocẽ desenvolve.

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