Menambahkan Atribut Tersuai pada Model Fasih
Keupayaan untuk menambah model Laravel/Eloquent dengan atribut tersuai adalah penting untuk mempertingkat perwakilan model. Secara lalai, model mendedahkan atribut yang sepadan dengan lajur jadualnya. Walau bagaimanapun, mengakses data atau pengiraan tambahan tanpa menanyakan pangkalan data selalunya diingini.
Satu cabaran terletak pada mengisi atribut tersuai apabila model dimuatkan. Kaedah lalai toArray() mengecualikan pengakses yang tidak memetakan terus ke lajur jadual. Untuk mengatasi had ini:
Versi Laravel >= 8:
Gunakan kelas Atribut dengan fungsi pengambil. Ini membenarkan mentakrifkan atribut tersuai tanpa kaitan langsung dengan lajur jadual.
<code class="php">class EventSession extends Eloquent { ... public function availability() { return new Attribute( get: fn () => $this->calculateAvailability() ); } ... }</code>
Versi Laravel < 8:
Dua pilihan tersedia:
Pilihan 1: Tetapan Atribut Eksplisit
Timpa kaedah toArray() dan tetapkan secara manual atribut tersuai.
<code class="php">class Book extends Eloquent { ... public function toArray() { $array = parent::toArray(); $array['upper'] = $this->upper; return $array; } public function getUpperAttribute() { return strtoupper($this->title); } ... }<p><strong>Pilihan 2: Gelung Melalui Pengakses Tersuai</strong></p> <p>Lelar ke atas semua atribut bermutasi dan gunakannya pada perwakilan tatasusunan.</p> <pre class="brush:php;toolbar:false"><code class="php">class Book extends Eloquent { ... public function toArray() { $array = parent::toArray(); foreach ($this->getMutatedAttributes() as $key) { if (! array_key_exists($key, $array)) { $array[$key] = $this->{$key}; } } return $array; } ... }</code>
Dengan menggunakan teknik ini, pembangun boleh menambah model Eloquent dengan atribut tersuai, memperkaya perwakilannya dan mempertingkatkan fungsi aplikasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Atribut Tersuai pada Model Fasih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!