Artikel
Laravel: Scopes und Methoden richtig benennen
Laravel-Scopes machen Code deutlich lesbarer und verständlicher und wirken zugleich wie Filter.
Scopes
In Laravel lassen sich Filter, genauer gesagt Scopes, einsetzen, wenn Sie ein Model mit einer bestimmten Methodenkette abfragen. Beginnen wir mit folgendem Beispiel:
Post::whereNotNull('published_at')->get();
Damit erhalten Sie alle Posts, deren Spalte published_at nicht null ist, einfacher gesagt: alle aktiven Posts.
Mit einem Scope sieht das so aus:
class Post extends Model { /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'published_at' => 'datetime', ]; public function scopeActive($query) { return $query->whereNotNull('published_at'); } }Die Verwendung sieht so aus:
Post::active()->get();
Scopes können auch Parameter entgegennehmen. Brauchen Sie etwa einen Scope, der ein Datum erwartet, können Sie ihn zum Beispiel „scopePublishedUntil“ oder „scopePublishedBefore“ nennen.
Das kann so aussehen:
public function scopePublishedUntil($query, $param)
{
return $query->where('published_at', '<=', $param);
}
Verwenden können Sie ihn so:
Post::publishedUntil('2021-11-09')->get();
Has-/Is-Methoden
Sie können Ihre Methoden schreiben, wie Sie möchten, aber behalten Sie das Grundlegende im Blick: Die Benennung ist der Schlüssel! Sie ist zugleich das Schwierigste beim Programmieren. Vor Kurzem bin ich in fremdem Code auf einen gravierenden Fehler gestoßen, und zwar bei der Benennung sogenannter „boolescher Funktionen“, also Funktionen, die ausschließlich einen Boolean zurückgeben sollen. Die einfache Regel lautet: Egal, wie die Methode heißt – beginnt ihr Name mit „is“ oder „has“, muss der Rückgabetyp ein Boolean sein. Hier ein korrektes Beispiel:
public function isPublished(): bool
{
return $this->published_at !== null;
}
Diese Methode gibt je nach Bedingung „true“ oder „false“ zurück. Achten Sie darauf, dass der Rückgabetyp nichts anderes als ein Boolean ist. Noch einmal: Die Benennung ist der Schlüssel!
Quelle