Skip to main content

Aan de slag

Accessors, mutators en attribuut-casts zijn mechanismen waarmee attribuutwaarden van Eloquent-modellen worden getransformeerd wanneer je ze via een modelinstantie ophaalt of instelt.
  • Accessor — bewerkt de ruwe waarde uit de DB en geeft die door aan je applicatie
  • Mutator — bewerkt de waarde die vanuit je applicatie wordt gezet en slaat die op in de DB
  • Cast — definieert declaratief typeconversie van attributen zonder extra methoden

Accessors definiëren

Om een accessor te definiëren, voeg je een protected methode toe aan je model. De methodenaam is in camelCase en het retourtype is Illuminate\Database\Eloquent\Casts\Attribute.
De ruwe waarde uit de DB wordt doorgegeven aan de get-closure. Je benadert de waarde via de modelinstantie als de property first_name.
Wil je een door een accessor berekende waarde opnemen in JSON/arrays, voeg die dan in snake_case toe aan de $appends-property van je model.

Een value object maken uit meerdere attributen

De get-closure kan als tweede argument $attributes (alle attributen van het model) ontvangen. Zo kun je meerdere kolommen combineren tot één value object.

Accessors cachen

Accessors die value objects teruggeven, worden automatisch door Eloquent gecachet zodat dezelfde instantie wordt teruggegeven. Wil je ook basistypen zoals strings en getallen cachen, roep dan shouldCache() aan.
Wil je het cachen van objecten uitschakelen, gebruik dan withoutObjectCaching().

Mutators definiëren

Mutators definieer je als het set-argument van Attribute::make(). Ze kunnen in dezelfde methode als de accessor.
Wanneer je een waarde op het model zet, wordt de set-closure aangeroepen.

Naar meerdere attributen schrijven

Als je vanuit de set-closure een array teruggeeft, kun je meerdere kolommen tegelijk bijwerken.

Attribuut-casts

Casts zijn een eenvoudige manier om typeconversie van attributen te declareren zonder accessors of mutators te schrijven. Je geeft een array terug in de casts()-methode van je model.

Overzicht van ingebouwde casts

Attributen met null worden niet gecast. Definieer bovendien geen casts met dezelfde naam als een relatie en geen casts op de primaire sleutel.

De Stringable-cast

Met AsStringable kun je een attribuut behandelen als een Illuminate\Support\Stringable-object.

Array- en JSON-casts

Je kunt JSON/TEXT-kolommen transparant behandelen als PHP-arrays.
Met de ->-operator kun je ook alleen een specifieke JSON-sleutel bijwerken.

De AsArrayObject- en AsCollection-casts

Bij de standaard array-cast krijg je een fout als je een specifieke offset van de array rechtstreeks probeert te wijzigen. Met AsArrayObject of AsCollection omzeil je dit probleem.
Wil je een eigen collectieklasse gebruiken, geef die dan op met using().

De vector-cast

Met de cast Illuminate\Database\Eloquent\Casts\AsVector kun je een vectorkolom in de database omzetten van en naar een PHP-array.
Bij het instellen van het attribuut kun je een PHP-array of een Arrayable-instantie zoals een Laravel-collectie opgeven. Bij het ophalen van het attribuut geeft de cast een array van drijvendekommagetallen terug.

Datum- en tijdcasts

created_at / updated_at worden standaard naar Carbon gecast. Extra datum-/tijdkolommen kun je op dezelfde manier definiëren.
Als je een formaat opgeeft, wordt dat formaat gebruikt bij JSON-serialisatie.
Wil je het standaard serialisatieformaat van alle datums wijzigen, override dan serializeDate() (dit heeft geen invloed op het opslagformaat in de DB).
Met immutable_datetime krijg je CarbonImmutable terug in plaats van Carbon. Omdat je datum- en tijdbewerkingen kunt uitvoeren zonder de oorspronkelijke instantie te wijzigen, schrijf je gemakkelijker code zonder bijwerkingen.

Enum-casts

Je kunt een backed enum van PHP 8.1 of hoger opgeven als cast.
In de DB wordt de backing-waarde van de enum opgeslagen (string of int), en bij het ophalen wordt die omgezet naar een enum-instantie.

Array-casts van enums

Wil je meerdere enum-waarden als array in één kolom opslaan, gebruik dan AsEnumCollection.

Casts tijdens queries

Om casts dynamisch toe te passen tijdens het uitvoeren van een query, gebruik je withCasts().

Eigen casts

Je kunt ook eigen castklassen maken. Implementeer de CastsAttributes-interface en definieer de methoden get en set.
Voor gedetailleerde implementatiemethoden (het value-objectpatroon, inbound casts, Castables, enz.) verwijzen we naar de volgende geavanceerde pagina.

Eigen casts in detail

Uitleg over de implementatie van de CastsAttributes-interface en geavanceerde eigen casts zoals het value-objectpatroon en Castables.

Gerelateerde pagina’s

Eloquent API-resources

Bekijk het gebruik van resourceklassen die modellen omzetten naar consistente JSON-API-responses.
Laatst gewijzigd op 6 september 2026