Was sind Casts?
Eloquent-Casts wandeln aus der Datenbank gelesene Rohwerte in PHP-Typen um und beim Speichern in die umgekehrte Richtung. Sie werden über die Methodecasts definiert.
Arten der integrierten Casts
Liste der von Laravel mitgelieferten Casts.AsArrayObject und AsCollection sind Laravel-intern als eigene Casts implementiert, damit einzelne Offsets eines Arrays direkt geändert werden können.Eine eigene Cast-Klasse erstellen
Wenn die eingebauten Casts nicht ausreichen, erstellen Sie eine eigene Cast-Klasse, die das InterfaceCastsAttributes implementiert.
Definition des Interfaces
Der Framework-Contract sieht folgendermaßen aus:$attributes alle Modellattribute enthält, sind auch spaltenübergreifende Umwandlungen möglich (siehe Value-Object-Muster unten).
Grundlegende Implementierung eines eigenen Casts
Erzeugen Sie ein Gerüst mitmake:cast.
app/Casts/AsMoney.php wird angelegt. Als Beispiel implementieren wir einen Cast, der einen als Integer gespeicherten Geldbetrag in ein Money-Value-Object umwandelt.
$order->price liefert nun eine Money-Instanz.
Value-Object-Casts
Ein Muster, um mehrere DB-Spalten als ein einziges Value Object zu behandeln.Beispiel: Adress-Cast
Die zwei Spaltenaddress_line_one und address_line_two werden in ein Address-Value-Object zusammengefasst.
Gibt
set ein Array zurück, verwendet Eloquent die Schlüssel als Spaltennamen und speichert die Werte in die jeweiligen Spalten. Bei Ein-Spalten-Casts geben Sie einen String oder Integer zurück.Value-Object-Cache
In Value Objects umgewandelte Attributwerte werden von Eloquent gecacht. Beim zweifachen Zugriff auf dasselbe Attribut erhalten Sie dieselbe Instanz. Wenn Sie den Cache deaktivieren möchten, fügen Sie in der Cast-Klasse die Property$withoutObjectCaching hinzu.
Inbound-Casts (nur Schreiben)
Ein Cast, der nur beim Schreiben in die DB umwandelt, beim Lesen aber nicht. Implementiert das InterfaceCastsInboundAttributes.
Typischer Anwendungsfall ist Hashing: Beim Speichern von Passwörtern oder geheimen Werten wird gehasht, beim Lesen wird der Hash unverändert zurückgegeben.
Cast-Parameter
Parameter an einen Cast übergeben Sie nach dem Klassennamen mit Doppelpunkt getrennt. Mehrere Parameter trennen Sie durch Komma.Castables: Cast-Logik im Value Object
Ein Value Object, das das InterfaceCastable implementiert, besitzt eine Methode castUsing, die die zu verwendende Cast-Klasse zurückgibt. So muss das Modell die Cast-Klasse nicht kennen und die Domänenlogik bleibt aufgeräumt.
Zusammenspiel mit $appends und $hidden
Casts, $appends und $hidden sind eigenständige Mechanismen. Bei der Kombination ist Sorgfalt geboten.
Casts zur Laufzeit ergänzen
Wenn Sie nur für eine bestimmte Query oder Anfrage Casts ergänzen wollen, nutzen SiemergeCasts.
Nächste Schritte
Eloquent-Observer und Modell-Events
Lernen Sie, wie Sie sich in Lebenszyklus-Events wie Speichern oder Löschen einklinken und eigene Verarbeitung ergänzen.