Model Laravel 9 Eloquent - nama lajur dikekalkan dalam model
P粉309989673
2023-09-03 14:36:02
<p>Saya mempunyai pangkalan data postgres dengan jadual yang mempunyai lajur yang dipanggil "atribut". </p>
<p>Lajur atribut adalah daripada jenis jsonb, jadi saya menggunakan penukaran Eloquent: </p>
<pre class="lang-php prettyprint-override"><kod>protected $casts = [
'attributes' => AsArrayObject::class,
];
</code></pre>
<p>Ini nampaknya menimbulkan masalah kerana "harta" itu sudah menjadi sifat model Eloquent dan nampaknya tidak ada sebarang peruntukan untuk mengalikan nama lajur. </p>
<p>Jadi baris ini: </p>
<pre class="lang-php prettyprint-override"><code>$this->attributes['a_property_of_the_attributes_jsonb_field'] = 'hello word!';
</code></pre>
<p>Nampaknya sedang mengakses atribut model Eloquent dalaman - dan bukannya medan 'atribut' dalam jadual pangkalan data saya, mengakibatkan ralat berikut: </p>
<pre class="brush:php;toolbar:false;">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"
<p>Saya tidak boleh menamakan semula lajur kerana projek bukan PHP lain menggunakan pangkalan data. </p>
<p>Bagaimanakah saya boleh mengakses medan Harta dalam model saya sebagai ArrayObject? </p>
Penyelesaian mudah ialah menggunakan kaedah aksesor ArrayObject:
Nota: Transformasi "atribut" masih perlu ditakrifkan untuk mengakses medan jsonb asas sebagai tatasusunan: