Rumah  >  Soal Jawab  >  teks badan

Model Laravel 9 Eloquent - nama lajur dikekalkan dalam model

<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粉309989673P粉309989673384 hari yang lalu498

membalas semua(1)saya akan balas

  • P粉034571623

    P粉0345716232023-09-04 12:12:46

    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
    ];

    balas
    0
  • Batalbalas