ホームページ  >  に質問  >  本文

Laravel 9 Eloquent モデル - モデル内の列名を保持

<p>「attributes」という列を持つテーブルを持つ postgres データベースがあります。 </p> <p>属性列は jsonb 型なので、Eloquent 変換を使用します。</p> <pre class="lang-php prettyprint-override"><code>protected $casts = [ '属性' => AsArrayObject::class, ]; </code></pre> <p>「プロパティ」はすでに Eloquent モデルのプロパティであり、列名のエイリアスを提供する機能がないようであるため、これは問題を引き起こすようです。 </p> <p>この行は次のようになります:</p> <pre class="lang-php prettyprint-override"><code>$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'こんにちは!'; </code></pre> <p>データベース テーブルの「属性」フィールドではなく、Eloquent モデルの内部属性にアクセスしているようです。その結果、次のエラーが発生します。</p> <pre class="brush:php;toolbar:false;">SQLSTATE[42703]: 未定義の列: 7 エラー: リレーション「mytable」の列「a_property_of_the_attributes_jsonb_field」が存在しません 行 1: "mytable" を更新します。 set "a_property_of_the_attributes_jsonb_field" = $1 where "mypk" = ...</pre> <p>他の非 PHP プロジェクトがデータベースを使用しているため、列の名前を変更できません。 </p> <p>モデルの Property フィールドに ArrayObject としてアクセスするにはどうすればよいですか? </p>
P粉309989673P粉309989673384日前496

全員に返信(1)返信します

  • P粉034571623

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

    簡単な解決策は、ArrayObject アクセサー メソッドを使用することです:

    リーリー

    注: 基になる jsonb フィールドに配列としてアクセスするには、「属性」変換を定義する必要があります:

    リーリー

    返事
    0
  • キャンセル返事