Scopes no Laravel: consultas Eloquent reutilizáveis

Scopes no Laravel: consultas Eloquent reutilizáveis
Os scopes do Laravel dão muito jeito quando tens de consultar os mesmos dados várias vezes. Além disso, tornam as tuas consultas mais fáceis de ler e de manter.

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
<?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:

php
$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:

php
$admins = User::where('admin', 1)->all();

E substituí-la por:

php
$admins = User::where('admin', 1)->where('active', 1)->all();

Já com scopes, bastaria alterar o scope assim:

php
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 ✌️.

Laravel

Damien Flandrin Programador web desde 2010, criador da Gekkode e do Email Impact. Cada artigo é testado num projeto real antes de ser publicado. Contacto
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.