Maison  >  Questions et réponses  >  le corps du texte

Modèle Laravel 9 Eloquent - noms de colonnes conservés dans le modèle

<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粉309989673P粉309989673384 Il y a quelques jours492

répondre à tous(1)je répondrai

  • P粉034571623

    P粉0345716232023-09-04 12:12:46

    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
    ];

    répondre
    0
  • Annulerrépondre