Skip to main content

Introduction

Les accesseurs, mutateurs et casts d’attribut transforment les valeurs d’un modèle Eloquent lors de la lecture et de la définition sur l’instance.
  • Accesseur — transforme la valeur brute de la base avant de la passer à l’application
  • Mutateur — transforme la valeur fournie par l’application avant de l’enregistrer
  • Cast — permet de déclarer une conversion de type sans écrire de méthode

Définir un accesseur

Ajoutez une méthode protected sur le modèle. Nom en camelCase, retour de type Illuminate\Database\Eloquent\Casts\Attribute.
La closure get reçoit la valeur brute. Accédez au champ via first_name.
Pour inclure la valeur calculée dans le JSON / le tableau, ajoutez-la à $appends (en snake_case).

Objet valeur à partir de plusieurs attributs

get peut recevoir $attributes (tous les attributs du modèle) en 2ᵉ argument, pour combiner des colonnes en un objet valeur.

Mise en cache des accesseurs

Les accesseurs retournant un objet valeur mémorisent automatiquement l’instance. Pour mettre en cache les types primitifs, appelez shouldCache().
Pour désactiver la mise en cache des objets, utilisez withoutObjectCaching().

Définir un mutateur

Le mutateur se définit via l’argument set de Attribute::make(). Il peut cohabiter avec l’accesseur.
À l’affectation, la closure set est appelée.

Écrire dans plusieurs attributs

Si set retourne un tableau, plusieurs colonnes sont mises à jour.

Casts d’attribut

Les casts offrent une déclaration concise des conversions de type sans écrire d’accesseur/mutateur. La méthode casts() retourne un tableau.

Casts intégrés

Les attributs null ne sont pas castés. Ne définissez pas non plus de cast portant le même nom qu’une relation, ni sur la clé primaire.

Cast Stringable

AsStringable traite l’attribut comme un Illuminate\Support\Stringable.

Casts tableau et JSON

Les colonnes JSON/TEXT peuvent être manipulées comme des tableaux PHP.
L’opérateur -> met à jour une clé JSON précise.

Casts AsArrayObject / AsCollection

Le cast standard array ne permet pas de modifier directement un offset. AsArrayObject ou AsCollection contournent ce problème.
Pour utiliser une classe de collection personnalisée, précisez using().

Casts de date/heure

created_at / updated_at sont castés en Carbon par défaut. Faites de même pour vos colonnes.
Un format spécifié détermine la sérialisation JSON.
Pour changer globalement le format de sérialisation, surchargez serializeDate() (n’affecte pas la persistance en base).
immutable_datetime renvoie un CarbonImmutable au lieu de Carbon, ce qui évite les effets de bord lors des manipulations de dates.

Casts Enum

Les Backed Enums de PHP 8.1+ peuvent servir de cast.
La base stocke la valeur backing (string ou int) ; la lecture retourne l’instance Enum.

Tableau d’Enums

Pour stocker plusieurs valeurs Enum dans une seule colonne, utilisez AsEnumCollection.

Casts au niveau requête

Appliquez un cast dynamiquement à l’exécution de la requête avec withCasts().

Casts personnalisés

Vous pouvez créer vos propres casts en implémentant CastsAttributes et en définissant get / set.
Pour l’implémentation détaillée (Value Object, casts entrants, Castables…), consultez la page avancée.

Casts personnalisés avancés

Implémentation de CastsAttributes, Value Object, Castables, etc.

Pages associées

Eloquent API Resources

Convertir des modèles en réponses JSON cohérentes.
Dernière modification le 13 juillet 2026