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çãoModelNotFoundException
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:
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: