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