
Se ainda não conheces os scopes do Laravel, este é o tutorial de que precisas 😉 .
O que são os scopes
No Laravel existem dois tipos de scopes (globais e locais). Para não complicar, só vou cobrir os scopes locais, ainda assim, dá uma olhada aos scopes globais quando tiveres oportunidade.
Então, o que é um local scope no Laravel? Ainda bem que perguntas. Aqui tens um exemplo de scope local dentro de um modelo de utilizador:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function scopeAdmin($query)
{
return $query->where('admin', 1);
}
}
No exemplo de código acima vês que temos o método scopeAdmin, que devolve uma $query em que a coluna admin vale 1. Agora que já viste um exemplo de scope local, vamos aprender a usá-lo.
Como usar os scopes
Se quiseres usar o nosso scopeAdmin dentro do projeto para obter uma coleção dos nossos utilizadores admin, basta escrever isto:
$admins = User::admin()->all();
Isto devolve-nos todos os admin da base de dados.
Com alguma sorte, já estás a ver o quanto são poderosos e como os scopes te poupam tempo e tornam o teu código mais legível. Se ainda não estás convencido, continua a ler para veres um exemplo de como te podem facilitar a vida.
Porquê usar os scopes
Retomando os exemplos anteriores, digamos que queremos alterar a consulta para que devolva apenas os admin cuja coluna active vale 1. Se não usássemos scopes na aplicação, teríamos de procurar esta consulta por todo o código:
$admins = User::where('admin', 1)->all();
E substituí-la por:
$admins = User::where('admin', 1)->where('active', 1)->all();
Já com scopes, bastaria alterar o scope assim:
public function scopeAdmin($query)
{
return $query->where('admin', 1)->where('active', 1);
}
E todas as consultas existentes passam a devolver os utilizadores admin cujo active vale 1. Como vês, o teu código fica mais eficaz e mais fácil de manter e de ler.
Conclusão
Usar scopes na tua aplicação Laravel leva a lógica para os modelos Eloquent em vez de a deixar diretamente nas vistas e nos controladores. Isso torna o projeto mais fácil de manter e de ler.
Espero que este artigo te tenha ajudado a perceber melhor os scopes do Laravel e que os venhas a usar nos teus próximos projetos ✌️.


