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 eineprotected Methode zum Modell hinzu. Der Methodenname folgt CamelCase-Konvention, der Rückgabetyp ist Illuminate\Database\Eloquent\Casts\Attribute.
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
Dieget-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 SieshouldCache() auf.
withoutObjectCaching().
Mutator definieren
Ein Mutator wird über das Argumentset von Attribute::make() definiert und lässt sich zusammen mit dem Accessor in derselben Methode ablegen.
set-Closure aufgerufen.
In mehrere Attribute schreiben
Gibt dieset-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 Methodecasts() Ihres Modells geben Sie ein Array zurück.
Eingebaute Casts im Überblick
Stringable-Cast
MitAsStringable verwenden Sie ein Attribut als Illuminate\Support\Stringable-Objekt.
Array-/JSON-Casts
JSON- oder TEXT-Spalten können transparent als PHP-Array behandelt werden.-> 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.
using().
Datums-Casts
created_at und updated_at werden standardmäßig zu Carbon gecastet. Weitere Datumsfelder können auf dieselbe Weise definiert werden.
serializeDate() (das Speicherformat in der Datenbank bleibt davon unberührt).
Enum-Casts
Ab PHP 8.1 lassen sich Backed Enums als Cast angeben.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 SieAsEnumCollection.
Casts zur Query-Laufzeit
Um Casts dynamisch beim Ausführen einer Query anzuwenden, verwenden SiewithCasts().
Benutzerdefinierte Casts
Sie können eigene Cast-Klassen erstellen. Implementieren Sie das InterfaceCastsAttributes und definieren Sie die Methoden get und set.
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.