Gli scope di Laravel: query Eloquent riutilizzabili

Gli scope di Laravel: query Eloquent riutilizzabili
Gli scope di Laravel tornano molto comodi quando devi interrogare gli stessi dati più volte. Rendono anche le tue query più facili da leggere e da gestire.

Se non hai ancora dimestichezza con gli scope di Laravel, questo è il tutorial che fa per te 😉 .

Che cosa sono gli scope

In Laravel esistono due tipi di scope (globali e locali). Per restare sul semplice tratterò solo gli scope locali, quando ne hai l’occasione, però, dai un’occhiata agli scope globali.

Che cos’è dunque uno scope di query locale in Laravel? Bella domanda. Ecco un esempio di scope locale dentro un modello User:

php
<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{
    public function scopeAdmin($query)
    {
        return $query->where('admin', 1);
    }
}

Nell’esempio di codice qui sopra vedi che abbiamo il metodo scopeAdmin, che restituisce una $query in cui la colonna admin vale 1. Ora che hai visto un esempio di scope locale, vediamo come si usa.

Come usare gli scope

Se vuoi usare il nostro scopeAdmin dentro il progetto per ottenere una collection dei nostri utenti admin, basta scrivere questo:

php
$admins = User::admin()->all();

Così otteniamo tutti gli admin presenti nel database.

Si intuisce quanto possano essere potenti e quanto gli scope facciano risparmiare tempo, rendendo il codice più leggibile. Se non sei ancora convinto, continua a leggere: c’è un esempio di come ti semplificano la vita.

Perché usare gli scope

Riprendendo gli esempi di codice precedenti, mettiamo di voler modificare la query perché restituisca solo gli admin in cui la colonna active vale 1. Senza scope nell’applicazione dovremmo cercare questa query in tutto il codice:

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

E sostituirla con:

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

Usando invece gli scope, ci basta modificare lo scope in questo modo:

php
public function scopeAdmin($query)
{
    return $query->where('admin', 1)->where('active', 1);
}

E tutte le query esistenti restituiranno gli utenti admin con active a 1. Come vedi, il codice diventa più efficiente, più facile da mantenere e da leggere.

Conclusione

Usare gli scope nella tua applicazione Laravel porta la logica nei modelli Eloquent invece di lasciarla nelle viste e nei controller. Il progetto diventa più facile da mantenere e da leggere.

Spero che questo articolo ti abbia fatto capire meglio gli scope di Laravel e che li userai nei tuoi prossimi progetti Laravel ✌️.

Laravel

Damien Flandrin Sviluppatore web dal 2010, creatore di Gekkode e di Email Impact. Ogni articolo è testato su un progetto reale prima della pubblicazione. Contatti
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.