
Wenn dir die Scopes von Laravel noch nichts sagen, bist du hier genau richtig 😉 .
Was Scopes sind
Laravel kennt zwei Arten von Scopes: globale und lokale. Der Einfachheit halber behandle ich hier nur die lokalen Scopes, wirf bei Gelegenheit trotzdem einen Blick auf die globalen Scopes.
Was ist also ein lokaler Query-Scope in Laravel? Gute Frage. Hier ein Beispiel für einen lokalen Scope in einem User-Modell:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function scopeAdmin($query)
{
return $query->where('admin', 1);
}
}
Im Codebeispiel oben siehst du die Methode scopeAdmin, die ein $query zurückgibt, in dem die Spalte admin den Wert 1 hat. Jetzt, wo du einen lokalen Scope gesehen hast, schauen wir uns an, wie du ihn einsetzt.
Scopes verwenden
Willst du scopeAdmin im Projekt nutzen, um eine Collection aller Admin-Nutzer zu bekommen, genügt folgender Code:
$admins = User::admin()->all();
Damit bekommst du alle admin aus der Datenbank.
Damit dürfte klar werden, wie mächtig Scopes sind, wie viel Zeit sie sparen und wie viel lesbarer sie deinen Code machen. Falls dich das noch nicht überzeugt, lies weiter: Das nächste Beispiel zeigt, wie sehr sie dir das Leben erleichtern.
Warum Scopes
Zurück zu den bisherigen Beispielen: Angenommen, die Abfrage soll nur noch die admin liefern, bei denen die Spalte active den Wert 1 hat. Ohne Scopes müsstest du im gesamten Code nach dieser Abfrage suchen:
$admins = User::where('admin', 1)->all();
Und sie ersetzen durch:
$admins = User::where('admin', 1)->where('active', 1)->all();
Mit Scopes dagegen passt du einfach den Scope an:
public function scopeAdmin($query)
{
return $query->where('admin', 1)->where('active', 1);
}
Und schon liefern sämtliche bestehenden Abfragen die Admin-Nutzer, bei denen active den Wert 1 hat. Dein Code wird dadurch effizienter, wartbarer und lesbarer.
Fazit
Scopes verlagern die Logik in deine Eloquent-Modelle, statt sie direkt in Views und Controllern unterzubringen. Das macht dein Projekt wartbarer und lesbarer.
Ich hoffe, dieser Artikel hat dir die Scopes von Laravel nähergebracht und du setzt sie in deinen nächsten Laravel-Projekten ein ✌️.


