Posted on: January 08, 2026 12:13 PM
Posted by: Renato
Categories: Laravel
Views: 271
Usando Scopes no Laravel para Código Mais Limpo e Reutilizável
📝 Artigo: Usando Scopes no Laravel para Código Mais Limpo e Reutilizável
Ao trabalhar com o Eloquent no Laravel, é muito comum repetir combinações de where, orderBy e outros filtros em várias partes do sistema. Esse padrão repetitivo é um forte indicativo de que você pode — e deve — usar Scopes.
Scopes permitem encapsular regras de consulta diretamente no Model, tornando o código mais limpo, legível e fácil de manter.
🔍 O problema do código repetido
Sem Scopes, consultas mais complexas acabam ficando grandes e difíceis de ler:
User::where('active', true)
->where('type', 'admin')
->orderBy('created_at', 'desc')
->get();
Agora imagine essa mesma lógica espalhada por controllers, services e jobs. Qualquer mudança exige edição em vários pontos do sistema.
✅ A solução: Local Scopes
Com Local Scopes, você encapsula essas regras no próprio Model:
User::active()
->admins()
->latest()
->get();
O código fica quase como uma frase em inglês, descrevendo exatamente o que a consulta faz.
🧠 Benefícios dos Scopes
-
Reutilização: escreva a regra uma vez e use em todo o sistema
-
Legibilidade: consultas mais curtas e expressivas
-
Manutenção fácil: altere a regra em um único lugar
-
Organização: regras de negócio relacionadas à consulta ficam no Model
🧩 Tipos de Scopes no Laravel
-
Local Scopes
Precisam ser chamados explicitamente (User::active()) -
Global Scopes
São aplicados automaticamente a todas as consultas do Model (ex: soft deletes, multi-tenant, filtros por empresa, etc.)
// Sem Scope
User::where('active', true)
->where('type', 'admin')
->orderBy('created_at', 'desc')
->get();
// Com Local Scope
User::active()
->admins()
->latest()
->get();
class User extends Model
{
public function scopeActive($query)
{
return $query->where('active', true);
}
public function scopeAdmins($query)
{
return $query->where('type', 'admin');
}
}
📖 Para aprofundar, vale conferir a documentação oficial do Laravel sobre Global Scopes.
- https://laravel.com/docs/12.x/eloquent
Donate to Site
Renato
Developer