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 eenprotected methode toe aan je model. De methodenaam is in camelCase en het retourtype is Illuminate\Database\Eloquent\Casts\Attribute.
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
Deget-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 danshouldCache() aan.
withoutObjectCaching().
Mutators definiëren
Mutators definieer je als hetset-argument van Attribute::make(). Ze kunnen in dezelfde methode als de accessor.
set-closure aangeroepen.
Naar meerdere attributen schrijven
Als je vanuit deset-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 decasts()-methode van je model.
Overzicht van ingebouwde casts
De Stringable-cast
MetAsStringable 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.->-operator kun je ook alleen een specifieke JSON-sleutel bijwerken.
De AsArrayObject- en AsCollection-casts
Bij de standaardarray-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.
using().
De vector-cast
Met de castIlluminate\Database\Eloquent\Casts\AsVector kun je een vectorkolom in de database omzetten van en naar een PHP-array.
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.
serializeDate() (dit heeft geen invloed op het opslagformaat in de DB).
Enum-casts
Je kunt een backed enum van PHP 8.1 of hoger opgeven als cast.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 danAsEnumCollection.
Casts tijdens queries
Om casts dynamisch toe te passen tijdens het uitvoeren van een query, gebruik jewithCasts().
Eigen casts
Je kunt ook eigen castklassen maken. Implementeer deCastsAttributes-interface en definieer de methoden get en set.
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.