Model Laravel 9 Eloquent - nama lajur dikekalkan dalam model
P粉309989673
P粉309989673 2023-09-03 14:36:02
0
1
551
<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>
P粉309989673
P粉309989673

membalas semua(1)
P粉034571623

Penyelesaian mudah ialah menggunakan kaedah aksesor ArrayObject:

$this['attributes'] = ['x' => 'y'];
$stuff = $this['attributes'];

Nota: Transformasi "atribut" masih perlu ditakrifkan untuk mengakses medan jsonb asas sebagai tatasusunan:

protected $casts = [
    'attributes' => AsArrayObject::class
];
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan