Skip to main content

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 de casts-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 interface CastsAttributes implementeert.

Definitie van de interface

Het contract in het framework zelf is als volgt gedefinieerd.
Het argument $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 commando make:cast.
Er wordt een app/Casts/AsMoney.php gegenereerd. Als voorbeeld implementeren we een cast die een geldbedrag (opgeslagen als geheel getal) omzet naar het value object Money.
Pas de cast toe op het model.
Nu geeft $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 kolommen address_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.
Toepassing op het model en gebruik:

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 interface CastsInboundAttributes. 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.
De parameters worden doorgegeven aan de constructor van de castklasse.

Castables: de castlogica bij het value object leggen

Een value object dat de interface Castable implementeert, heeft een castUsing-methode die zijn eigen castklasse teruggeeft. Het model hoeft de castklasse dan niet te kennen, wat de domeinlogica overzichtelijker maakt.
Aan de modelkant geef je in plaats van de castklasse de value-objectklasse op.
Combineer je Castable met een anonieme klasse, dan kun je het value object en de castlogica in één bestand bundelen.

Interactie met $appends en $hidden

Casts en $appends / $hidden zijn onafhankelijke mechanismen, maar bij het combineren moet je opletten.
In $hidden geef je de DB-kolomnamen op. Niet de attribuutnaam die via de cast ontstaat (address), maar de oorspronkelijke kolomnamen (address_line_one, address_line_two).

Casts toevoegen tijdens runtime

Wil je alleen voor een specifieke query of request een cast toevoegen, gebruik dan de methode mergeCasts.

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.
Laatst gewijzigd op 6 september 2026