如何在載入時為 Laravel/Eloquent 模型新增自訂屬性?

Patricia Arquette
發布: 2024-11-04 05:41:29
原創
552 人瀏覽過

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

加載時Laravel/Eloquent 模型中的自訂屬性

在最初嘗試向Eloquent 模型新增自訂屬性時會出現挑戰已載入.這可以避免使用循環手動填充屬性的需求。雖然已經探索了模型事件,但尚未產生預期的結果。

解決方案

根本問題源自於 toArray() 方法忽略不直接對應於資料庫的存取器表列。然而,Laravel 提供了一個簡單的解決方法:

Laravel >= 8.0

引入一個帶有getter 函數的Attribute 類別來計算自訂屬性:

引入一個帶有getter 函數的Attribute 類別來計算自訂屬性:
<code class="php">class EventSession extends Eloquent {
    public function availability()
    {
        return new Attribute(get: fn () => $this->calculateAvailability());
    }
}</code>
登入後複製

Laravel = 4.08

將自訂屬性新增至$appends 屬性並定義getter 存取器:
<code class="php">class EventSession extends Eloquent {
    protected $appends = ['availability'];
    public function getAvailabilityAttribute()
    {
        return $this->calculateAvailability();
    }
}</code>
登入後複製

Laravel

Laravel

<code class="php">class EventSession extends Eloquent {
    public function toArray()
    {
        $array = parent::toArray();
        $array['availability'] = $this->availability;
        return $array;
    }
}</code>
登入後複製

Laravel
<code class="php">class EventSession extends Eloquent {
    public function toArray()
    {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key) {
            $array[$key] = $this->$key;
        }
        return $array;
    }
}</code>
登入後複製
4.08

重寫to遍歷變異屬性以檢索其值:或透過實作這些解決方案,可以在載入時輕鬆將自訂屬性新增至Eloquent 模型中,因此無需手動填充屬性。

以上是如何在載入時為 Laravel/Eloquent 模型新增自訂屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板