Modèle Laravel 9 Eloquent - noms de colonnes conservés dans le modèle
P粉309989673
P粉309989673 2023-09-03 14:36:02
0
1
491
<p>J'ai une base de données Postgres avec une table qui comporte une colonne appelée "attributs". </p> <p>La colonne d'attribut est de type jsonb, j'utilise donc la conversion Eloquent : </p> <pre class="lang-php Prettyprint-override"><code>protected $casts = [ 'attributs' => AsArrayObject::class, ]; </code></pre> <p>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. </p> <p>Donc cette ligne : </p> <pre class="lang-php Prettyprint-override"><code>$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'bonjour mot !'; </code></pre> <p>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 : </p> <pre class="brush:php;toolbar:false;">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" = ...</pre> <p>Je ne peux pas renommer la colonne car d'autres projets non PHP utilisent la base de données. </p> <p>Comment accéder au champ Propriété dans mon modèle en tant qu'ArrayObject ? </p>
P粉309989673
P粉309989673

répondre à tous(1)
P粉034571623

La solution simple consiste à utiliser la méthode d'accesseur ArrayObject :

$this['attributes'] = ['x' => 'y'];
$stuff = $this['attributes'];

Remarque : La transformation "attributs" doit encore être définie pour accéder au champ jsonb sous-jacent sous forme de tableau :

protected $casts = [
    'attributes' => AsArrayObject::class
];
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!