Skip to main content

Einführung

Accessors, Mutators und Attribute Casts transformieren Werte eines Eloquent-Modells beim Lesen und Schreiben auf einer Modellinstanz.
  • Accessor – veredelt den Rohwert aus der Datenbank für die Verwendung in der Anwendung
  • Mutator – transformiert den in der Anwendung gesetzten Wert, bevor er in die Datenbank geht
  • Cast – definiert deklarativ Typkonvertierungen für Attribute, ohne dass zusätzliche Methoden nötig wären

Accessor definieren

Für einen Accessor fügen Sie eine protected Methode zum Modell hinzu. Der Methodenname folgt CamelCase-Konvention, der Rückgabetyp ist Illuminate\Database\Eloquent\Casts\Attribute.
Die get-Closure erhält den Rohwert aus der Datenbank. Auf der Modellinstanz greifen Sie über die Property first_name zu.
Wenn Sie den vom Accessor berechneten Wert in JSON- oder Array-Ausgaben aufnehmen möchten, tragen Sie ihn in der $appends-Property des Modells als Snake-Case ein.

Wertobjekt aus mehreren Attributen erzeugen

Die get-Closure kann als zweites Argument $attributes erhalten (alle Attribute des Modells). Damit können Sie mehrere Spalten zu einem Wertobjekt kombinieren.

Caching von Accessors

Accessors, die Wertobjekte zurückgeben, cachet Eloquent automatisch, sodass dieselbe Instanz zurückgegeben wird. Möchten Sie auch primitive Typen wie Strings oder Zahlen cachen, rufen Sie shouldCache() auf.
Um das Objekt-Caching auszuschalten, verwenden Sie withoutObjectCaching().

Mutator definieren

Ein Mutator wird über das Argument set von Attribute::make() definiert und lässt sich zusammen mit dem Accessor in derselben Methode ablegen.
Beim Setzen des Werts wird die set-Closure aufgerufen.

In mehrere Attribute schreiben

Gibt die set-Closure ein Array zurück, können mehrere Spalten gleichzeitig aktualisiert werden.

Attribute Casts

Casts sind eine bequeme Möglichkeit, Typkonvertierungen deklarativ zu definieren, ohne dafür Accessors und Mutators zu schreiben. Über die Methode casts() Ihres Modells geben Sie ein Array zurück.

Eingebaute Casts im Überblick

Attribute mit null-Wert werden nicht gecastet. Legen Sie außerdem keine Casts an, deren Name dem einer Relation entspricht, und wandeln Sie den Primärschlüssel nicht per Cast um.

Stringable-Cast

Mit AsStringable verwenden Sie ein Attribut als Illuminate\Support\Stringable-Objekt.

Array-/JSON-Casts

JSON- oder TEXT-Spalten können transparent als PHP-Array behandelt werden.
Mit dem Operator -> können Sie auch einzelne Schlüssel innerhalb des JSON aktualisieren.

Casts AsArrayObject / AsCollection

Der Standard-array-Cast führt zu einem Fehler, wenn Sie einzelne Array-Offsets direkt ändern möchten. Mit AsArrayObject und AsCollection umgehen Sie dieses Problem.
Für eine eigene Collection-Klasse verwenden Sie using().

Datums-Casts

created_at und updated_at werden standardmäßig zu Carbon gecastet. Weitere Datumsfelder können auf dieselbe Weise definiert werden.
Wenn Sie ein Format angeben, wird dieses bei der JSON-Serialisierung verwendet.
Möchten Sie das Standard-Serialisierungsformat für alle Datumsfelder ändern, überschreiben Sie serializeDate() (das Speicherformat in der Datenbank bleibt davon unberührt).
Mit immutable_datetime erhalten Sie statt eines Carbon-Objekts eine CarbonImmutable-Instanz. Da sich diese Instanz beim Manipulieren nicht ändert, lässt sich damit besonders nebeneffektfreier Code schreiben.

Enum-Casts

Ab PHP 8.1 lassen sich Backed Enums als Cast angeben.
In der Datenbank wird der Backing-Wert (string oder int) des Enums gespeichert; beim Lesen wird eine Enum-Instanz zurückgegeben.

Array-Cast für Enums

Wenn Sie mehrere Enum-Werte als Array in einer Spalte speichern möchten, verwenden Sie AsEnumCollection.

Casts zur Query-Laufzeit

Um Casts dynamisch beim Ausführen einer Query anzuwenden, verwenden Sie withCasts().

Benutzerdefinierte Casts

Sie können eigene Cast-Klassen erstellen. Implementieren Sie das Interface CastsAttributes und definieren Sie die Methoden get und set.
Details zur Umsetzung (Value-Object-Muster, Inbound Casts, Castables usw.) finden Sie auf der weiterführenden Seite.

Benutzerdefinierte Casts im Detail

Erläutert die Implementierung des CastsAttributes-Interfaces sowie fortgeschrittene Muster wie Value Objects und Castables.

Verwandte Seiten

Eloquent-API-Ressourcen

Erfahren Sie, wie Sie Modelle mit Resource-Klassen in konsistente JSON-API-Antworten umwandeln.
Zuletzt geändert am 13. Juli 2026