Wat zijn casts?
Casts in Eloquent vormen het mechanisme dat ruwe waarden uit de database omzet naar PHP-datatypes en die omzetting bij het opslaan weer terugdraait. Je definieert ze met decasts-methode.
Soorten ingebouwde casts
Een overzicht van de casts die Laravel standaard biedt.AsArrayObject en AsCollection zijn binnen Laravel geïmplementeerd als custom casts, zodat je een specifieke offset van de array direct kunt wijzigen.Een custom castklasse maken
Heb je een omzetting nodig die de ingebouwde casts niet aankunnen, dan maak je een custom cast die de interfaceCastsAttributes implementeert.
Definitie van de interface
Het contract in het framework zelf is als volgt gedefinieerd.$attributes bevat alle attributen van het model, dus je kunt ook omzettingen over meerdere kolommen heen doen (zie het value-objectpatroon hieronder).
Implementatie van een basale custom cast
Genereer een sjabloon met het commandomake:cast.
app/Casts/AsMoney.php gegenereerd. Als voorbeeld implementeren we een cast die een geldbedrag (opgeslagen als geheel getal) omzet naar het value object Money.
$order->price een Money-instantie terug.
Value-objectcasts
Een patroon waarbij je meerdere DB-kolommen samen als één value object behandelt.Implementatievoorbeeld: een adrescast
We bundelen de twee kolommenaddress_line_one en address_line_two in het value object Address.
Geef je in de
set-methode een array terug, dan slaat Eloquent de sleutels op als kolomnamen en de waarden in de betreffende kolommen. Bij een cast voor een enkele kolom geef je een string of geheel getal terug.Caching van value objects
Attribuutwaarden die zijn omgezet naar een value object worden door Eloquent gecachet. Ook als je hetzelfde attribuut twee keer benadert, krijg je dezelfde objectinstantie terug. Wil je de caching uitschakelen, voeg dan de property$withoutObjectCaching toe aan de castklasse.
Inbound casts (alleen-schrijven)
Een cast die alleen bij het schrijven naar de DB omzet en bij het lezen niets doet. Hiervoor implementeer je de interfaceCastsInboundAttributes.
Een typische toepassing is hashen: alleen omzetten bij het opslaan van wachtwoorden of geheime waarden, en bij het lezen de hashwaarde ongewijzigd teruggeven.
Castparameters
Wil je parameters doorgeven aan een custom cast, dan zet je die achter de klassenaam, gescheiden door een dubbele punt. Meerdere parameters scheid je met komma’s.Castables: de castlogica bij het value object leggen
Een value object dat de interfaceCastable implementeert, heeft een castUsing-methode die zijn eigen castklasse teruggeeft. Het model hoeft de castklasse dan niet te kennen, wat de domeinlogica overzichtelijker maakt.
Interactie met $appends en $hidden
Casts en $appends / $hidden zijn onafhankelijke mechanismen, maar bij het combineren moet je opletten.
Casts toevoegen tijdens runtime
Wil je alleen voor een specifieke query of request een cast toevoegen, gebruik dan de methodemergeCasts.
Volgende stap
Eloquent-observers en modelevents
Leer hoe je inhaakt op lifecycle-events van modellen, zoals opslaan en verwijderen, om extra verwerking toe te voegen.