AsArrayObject::class,]; ce qui semble poser des problèmes puisque les "attributs" sont déjà des propriétés de modèle Eloquent et ne le sont pas. Il ne semble pas y avoir de spécification de nom de colonne d'alias. Donc cette ligne : $this->attribut">
J'ai une base de données Postgres avec une table qui comporte une colonne appelée "attributs".
La colonne d'attribut est de type jsonb, j'utilise donc la conversion Eloquent :
protected $casts = [ 'attributs' => AsArrayObject::class, ];
Cela semble poser des problèmes car la "propriété" est déjà une propriété de modèle Eloquent et il ne semble y avoir aucune disposition pour l'alias des noms de colonnes.
Donc cette ligne :
$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'bonjour mot !';
Semble accéder à un attribut interne du modèle Eloquent - plutôt qu'au champ « attributs » dans ma table de base de données, ce qui entraîne l'erreur suivante :
SQLSTATE[42703] : colonne non définie : 7 ERREUR : la colonne "a_property_of_the_attributes_jsonb_field" de la relation "mytable" n'existe pas LIGNE 1 : mettre à jour "mytable" défini "a_property_of_the_attributes_jsonb_field" = $1 où "mypk" = ...
Je ne peux pas renommer la colonne car d'autres projets non PHP utilisent la base de données.
Comment accéder au champ Propriété dans mon modèle en tant qu'ArrayObject ?
La solution simple consiste à utiliser la méthode d'accesseur ArrayObject :
Remarque : La transformation "attributs" doit encore être définie pour accéder au champ jsonb sous-jacent sous forme de tableau :