Laravel 9 Eloquent モデル - モデル内の列名を保持
P粉309989673
2023-09-03 14:36:02
<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>
簡単な解決策は、ArrayObject アクセサー メソッドを使用することです:
リーリー注: 基になる jsonb フィールドに配列としてアクセスするには、「属性」変換を定義する必要があります:
リーリー