Skip to main content

Qu’est-ce qu’un cast

Les casts Eloquent permettent de convertir la valeur brute récupérée en base en un type PHP et d’effectuer l’opération inverse lors de la sauvegarde. Ils sont définis via la méthode casts.

Types de casts intégrés

Voici la liste des casts fournis en standard par Laravel.
AsArrayObject et AsCollection sont implémentés en interne dans Laravel comme des casts personnalisés, afin de permettre la modification directe d’offsets spécifiques du tableau.

Création d’une classe de cast personnalisée

Lorsque les casts intégrés ne suffisent pas, créez un cast personnalisé en implémentant l’interface CastsAttributes.

Définition de l’interface

Le contrat du framework est défini ainsi :
L’argument $attributes contient tous les attributs du modèle, ce qui rend possible une conversion s’étendant sur plusieurs colonnes (voir le pattern Value Object ci-dessous).

Implémentation d’un cast personnalisé de base

Générez un squelette avec la commande make:cast.
app/Casts/AsMoney.php est généré. Comme exemple, implémentons un cast qui convertit un montant (stocké sous forme d’entier) en Value Object Money.
Appliquez le cast au modèle.
Désormais, $order->price retourne une instance de Money.

Cast Value Object

Pattern qui regroupe plusieurs colonnes BDD en un seul Value Object.

Exemple d’implémentation : cast Adresse

Regroupez les deux colonnes address_line_one et address_line_two dans un Value Object Address.
Si set retourne un tableau, Eloquent utilise les clés comme noms de colonnes et sauvegarde chaque valeur dans la colonne correspondante. Pour un cast à une seule colonne, retournez une chaîne ou un entier.
L’application au modèle et l’utilisation sont les suivantes :

Mise en cache des Value Objects

Les attributs convertis en Value Object sont mis en cache par Eloquent. Accéder deux fois au même attribut retourne la même instance d’objet. Pour désactiver la mise en cache, ajoutez la propriété $withoutObjectCaching à la classe de cast.

Cast entrant (inbound, écriture seule)

Cast qui effectue la conversion uniquement lors de l’écriture en BDD, sans conversion lors de la lecture. Implémentez l’interface CastsInboundAttributes. Le cas d’usage typique est le hachage. Convertir uniquement à la sauvegarde d’un mot de passe ou d’une valeur secrète, la lecture retourne le hash tel quel.

Paramètres de cast

Pour passer des paramètres à un cast personnalisé, spécifiez-les après le nom de la classe séparés par un :. Plusieurs paramètres sont séparés par des virgules.
Les paramètres sont passés au constructeur de la classe de cast.

Castables : porter la logique de cast dans le Value Object

Un Value Object implémentant l’interface Castable a une méthode castUsing qui retourne sa propre classe de cast. Comme le modèle n’a plus besoin de connaître la classe de cast, la logique métier gagne en clarté.
Côté modèle, spécifiez la classe Value Object au lieu de la classe de cast.
En combinant Castable avec une classe anonyme, vous pouvez regrouper le Value Object et la logique de cast dans un même fichier.

Interaction avec $appends et $hidden

Les casts, $appends et $hidden sont des mécanismes indépendants, mais leur combinaison demande de l’attention.
Ce qui est spécifié dans $hidden correspond aux noms de colonnes BDD. Précisez les noms de colonnes originales (address_line_one, address_line_two) plutôt que le nom d’attribut produit par le cast (address).

Ajout de casts au runtime

Pour ajouter des casts uniquement pour une requête ou un traitement particulier, utilisez la méthode mergeCasts.

Étapes suivantes

Observateurs Eloquent et événements de modèle

Apprenez à ajouter du traitement en s’accrochant aux événements du cycle de vie du modèle (sauvegarde, suppression, etc.).
Dernière modification le 13 juillet 2026