首頁  >  文章  >  後端開發  >  如何在載入時為 Laravel/Eloquent 模型新增自訂屬性?

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

Patricia Arquette
Patricia Arquette原創
2024-11-04 05:41:29553瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn