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éthodecasts.
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’interfaceCastsAttributes.
Définition de l’interface
Le contrat du framework est défini ainsi :$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 commandemake: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.
$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 colonnesaddress_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.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’interfaceCastsInboundAttributes.
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.
Castables : porter la logique de cast dans le Value Object
Un Value Object implémentant l’interfaceCastable 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é.
Interaction avec $appends et $hidden
Les casts, $appends et $hidden sont des mécanismes indépendants, mais leur combinaison demande de l’attention.
Ajout de casts au runtime
Pour ajouter des casts uniquement pour une requête ou un traitement particulier, utilisez la méthodemergeCasts.
É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.).