Laravel-scopes: Eloquent-queries herbruikbaar maken

Laravel-scopes zijn handig zodra je dezelfde data telkens opnieuw opvraagt: ze bundelen de voorwaarden in het model en maken je Eloquent-queries korter en beter leesbaar.

Laravel-scopes: Eloquent-queries herbruikbaar maken
Laravel-scopes zijn bijzonder handig zodra je dezelfde data meerdere keren moet opvragen. Ze maken je queries meteen ook leesbaarder en makkelijker te beheren.

Ben je nog niet vertrouwd met de scopes van Laravel? Dan is dit de tutorial die je zoekt 😉 .

Wat zijn scopes

Laravel kent twee soorten scopes: global en local. Om het eenvoudig te houden behandel ik alleen de local scopes, werp bij gelegenheid toch zeker een blik op de global scopes.

Wat is een local query scope in Laravel dan precies? Goede vraag. Hier is een voorbeeld van een local scope in een gebruikersmodel:

php
<?php

namespace App;

use IlluminateDatabaseEloquentModel;

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

In het codevoorbeeld hierboven zie je de methode scopeAdmin, die een $query teruggeeft waarin de kolom admin de waarde 1 heeft. Nu je een local scope hebt gezien, gaan we hem gebruiken.

Hoe gebruik je scopes

Wil je onze scopeAdmin in het project gebruiken om een collectie van je adminaccounts op te halen, dan volstaat deze code:

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

Dat levert ons nu elke admin in de database op.

Je ziet hopelijk hoe krachtig ze zijn, en hoeveel tijd scopes je besparen terwijl je code leesbaarder wordt. Ben je nog niet overtuigd, lees dan door voor een voorbeeld van hoe ze je leven makkelijker maken.

Waarom scopes gebruiken

Neem de vorige codevoorbeelden en stel dat we de query willen aanpassen zodat ze alleen nog de admin teruggeeft waarvan de kolom active de waarde 1 heeft. Zonder scopes zouden we de hele codebase moeten afzoeken naar deze query:

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

Om die dan te vervangen door:

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

Met scopes hoeven we alleen de scope zelf aan te passen:

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

En al onze bestaande queries halen voortaan de admingebruikers op waarvan active op 1 staat. Je ziet het: je code wordt efficiënter, beter te onderhouden en makkelijker te lezen.

Conclusie

Scopes gebruiken in je Laravel-applicatie brengt de logica naar je Eloquent-modellen in plaats van ze rechtstreeks in je views en controllers te zetten. Dat maakt je project makkelijker te onderhouden en te lezen.

Ik hoop dat dit artikel je een beter beeld van de scopes van Laravel heeft gegeven, en dat je ze in je volgende Laravel-projecten gaat gebruiken ✌️.

Laravel

Damien Flandrin Webdeveloper sinds 2010, maker van Gekkode en Email Impact. Elk artikel wordt vóór publicatie getest op een echt project. Contact
Nieuwsbrief

Nieuwe tests, tutorials en projecten, per e-mail.

Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.