Bagaimana untuk Menambah Atribut Tersuai pada Model Fasih Laravel pada Muatan?

Patricia Arquette
Lepaskan: 2024-11-01 07:41:30
asal
753 orang telah melayarinya

How to Add Custom Attributes to Laravel Eloquent Models on Load?

Bagaimanakah untuk Menambahkan Atribut Tersuai pada Model Laravel Eloquent pada Muatan?

Dalam Laravel Eloquent, anda mungkin menghadapi senario yang ingin anda tambahkan atribut tersuai kepada model apabila ia dimuatkan. Sebagai contoh, pertimbangkan pengawal seperti ini:

<code class="php">public function index()
{
    $sessions = EventSession::all();
    foreach ($sessions as $i => $session) {
        $sessions[$i]->available = $session->getAvailability();
    }
    return $sessions;
}</code>
Salin selepas log masuk

Adalah senang untuk melangkau gelung manual dan atribut 'tersedia' diisi secara automatik.

Masalahnya

Isu di sini ialah kaedah toArray() model mengabaikan pengakses yang tidak sepadan dengan lajur dalam jadual asas. Ini adalah reka bentuk yang disengajakan atas sebab prestasi.

Penyelesaian

Versi Laravel >= 8:

Mujurlah, terdapat cara yang elegan untuk mencapai ini menggunakan kelas Atribut:

<code class="php">class EventSession extends Eloquent {

    protected $table = 'sessions';

    public function availability()
    {
        return new Attribute(
            get: fn () => $this->calculateAvailability()
        );  
    }
}</code>
Salin selepas log masuk

Versi Laravel < 8:

Pilihan 1: Menambah Harta

Untuk versi kurang daripada 8, anda boleh menggunakan sifat $appends untuk mengawal atribut yang disertakan dalam siri bentuk model:

<code class="php">class EventSession extends Eloquent {

    protected $table = 'sessions';
    protected $appends = array('availability');

    public function getAvailabilityAttribute()
    {
        return $this->calculateAvailability();  
    }
}<p><strong>Pilihan 2: Kaedah Override toArray()</strong></p>
<p>Sebagai alternatif, anda boleh mengatasi kaedah toArray() dan tetapkan atribut secara manual: </p>
<pre class="brush:php;toolbar:false"><code class="php">class Book extends Eloquent {

    protected $table = 'books';
    
    public function toArray()
    {
        $array = parent::toArray();
        $array['upper'] = $this->upper;
        return $array;
    }
    
    public function getUpperAttribute()
    {
        return strtoupper($this->title);    
    }

}</code>
Salin selepas log masuk

Pilihan 3: Gelung Melalui Atribut Bermutasi

Jika anda mempunyai banyak pengakses tersuai, anda boleh mengulanginya dan menerapkannya semasa penyirian:

<code class="php">class Book extends Eloquent {

    protected $table = 'books';
    
    public function toArray()
    {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key)
        {
            if ( ! array_key_exists($key, $array)) {
                $array[$key] = $this->{$key};   
            }
        }
        return $array;
    }
    
    public function getUpperAttribute()
    {
        return strtoupper($this->title);    
    }

}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menambah Atribut Tersuai pada Model Fasih Laravel pada Muatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!