AsArrayObject::class,]; yang nampaknya menimbulkan masalah kerana "atribut" sudah menjadi sifat model Eloquent dan tidak' t nampaknya mempunyai sebarang alias spesifikasi nama Lajur. Jadi baris ini: $this->attribut">
Saya mempunyai pangkalan data postgres dengan jadual yang mempunyai lajur yang dipanggil "atribut".
Lajur atribut adalah daripada jenis jsonb, jadi saya menggunakan penukaran Eloquent:
protected $casts = [ 'attributes' => AsArrayObject::class, ];
Ini nampaknya menimbulkan masalah kerana "harta" itu sudah menjadi sifat model Eloquent dan nampaknya tidak ada sebarang peruntukan untuk mengalikan nama lajur.
Jadi baris ini:
$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'hello word!';
Nampaknya sedang mengakses atribut model Eloquent dalaman - dan bukannya medan 'atribut' dalam jadual pangkalan data saya, mengakibatkan ralat berikut:
SQLSTATE[42703]: Lajur tidak ditentukan: 7 ERROR: lajur "a_property_of_the_attributes_jsonb_field" LINE 1: kemas kini "mytable"tetapkan "a_property_of_the_attributes_jsonb_field"Saya tidak boleh menamakan semula lajur kerana projek bukan PHP lain menggunakan pangkalan data.
Bagaimanakah saya boleh mengakses medan Harta dalam model saya sebagai ArrayObject?
Penyelesaian mudah ialah menggunakan kaedah aksesor ArrayObject:
Nota: Transformasi "atribut" masih perlu ditakrifkan untuk mengakses medan jsonb asas sebagai tatasusunan: