Os Models no Laravel 11 desempenham um papel essencial na arquitetura MVC (Model-View-Controller). Eles representam e manipulam os dados do banco de dados, permitindo interações eficientes com o Eloquent ORM. Neste artigo, você aprenderá as funcionalidades dos Models no Laravel 11 e como usá-los da melhor forma para otimizar o desempenho da aplicação.
O Que São Models no Laravel 11?
Os Models no Laravel servem como uma camada de abstração entre a aplicação e o banco de dados. Com o Eloquent ORM, cada Model representa uma tabela no banco de dados, facilitando consultas e manipulação de dados usando PHP puro, sem a necessidade de SQL complexo.
Exemplo de um Model no Laravel 11:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'content', 'author_id'];
}
Este exemplo representa um Model chamado Post, ligado a uma tabela chamada posts, onde os campos title, content e author_id são preenchíveis.
Como Criar um Model no Laravel 11?
A criação de um Model pode ser feita rapidamente através do Artisan, o CLI (Command Line Interface) do Laravel.
Comando para criar um Model no Laravel 11:
php artisan make:model Post
Criando um Model com migração e factory:
php artisan make:model Post -mf
Isso gerará:
• app/Models/Post.php → O Model
• database/migrations/YYYY_MM_DD_create_posts_table.php → A migração
• database/factories/PostFactory.php → A fábrica de dados
⚡ Principais Métodos e Funcionalidades dos Models no Laravel 11
Trabalhando com Fillable e Guarded
O Laravel protege seus Models contra mass assignment, ou seja, preenchimento de atributos de forma não autorizada. Para permitir certos campos, usamos o fillable:
protected $fillable = ['title', 'content', 'author_id'];
Ou, para bloquear todos os campos exceto alguns específicos, usamos guarded:
protected $guarded = ['id'];
✅ Melhor prática: Sempre defina fillable ou guarded para evitar vulnerabilidades.
Criando e Atualizando Registros
Criando um novo post:
Post::create([
'title' => 'Meu Primeiro Post',
'content' => 'Este é o conteúdo do post.',
'author_id' => 1
]);
Atualizando um post existente:
$post = Post::find(1);
$post->update([
'title' => 'Título Atualizado'
]);
Buscando Registros (Queries Eloquent)
✅ Busca por ID
$post = Post::find(1);
✅ Busca por Condições
$posts = Post::where('author_id', 1)->get();
✅ Busca com Ordenação
$posts = Post::orderBy('created_at', 'desc')->get();
✅ Paginação
$posts = Post::paginate(10);
Use paginação para melhorar o carregamento da página e evitar longas listas de dados.
Relacionamentos Entre Models
No Laravel, podemos definir relacionamentos para conectar tabelas de forma eficiente.
One-to-Many (Um para Muitos)
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
Uso:
$comments = Post::find(1)->comments;
Many-to-Many (Muitos para Muitos)
class Post extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class);
}
}
Uso:
$tags = Post::find(1)->tags;
Utilizando Scopes para Consultas Reutilizáveis
Os Scopes permitem criar consultas reutilizáveis dentro dos Models.
class Post extends Model
{
public function scopePublished($query)
{
return $query->where('published', true);
}
}
Uso:
$publishedPosts = Post::published()->get();
✅ Melhor prática: Use Scopes para manter o código limpo e organizado.
🏆 Dicas Avançadas para Melhorar o Desempenho dos Models
• Cache de Consultas: Utilize cache para evitar acessos repetitivos ao banco de dados.
• Lazy Loading vs. Eager Loading: Prefira with() para carregar relações antecipadamente e reduzir queries.
$posts = Post::with('comments')->get();
• Indexação no Banco de Dados: Adicione índices (INDEX) nas colunas mais buscadas.
• Soft Deletes: Para evitar deletar registros permanentemente, use SoftDeletes.
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
}
Os Models no Laravel 11 são extremamente poderosos quando bem utilizados. Ao seguir boas práticas como o uso de fillable, relacionamentos, Scopes e Eager Loading, você garante mais segurança, performance e organização no seu código.
Se gostou deste conteúdo, compartilhe!