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