為 Eloquent 模型添加自訂屬性
使用自訂屬性增強 Laravel/Eloquent 模型的能力對於增強模型表示至關重要。預設情況下,模型公開與其表列相對應的屬性。然而,在不查詢資料庫的情況下存取附加資料或計算通常是可取的。
載入模型時填入自訂屬性是一個挑戰。預設的 toArray() 方法排除不直接對應到表格列的存取器。要克服此限制:
Laravel 版本 >= 8:
使用帶有 getter 函數的 Attribute 類別。這允許定義與表列沒有直接關係的自訂屬性。
<code class="php">class EventSession extends Eloquent { ... public function availability() { return new Attribute( get: fn () => $this->calculateAvailability() ); } ... }</code>
Laravel versions
Laravel versions8:有兩個選項:
<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); } ... }</code>選項1:明確屬性設定
重寫toArray() 方法並手動指派自訂屬性。
<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>選項 2:循環自訂存取器迭代所有變異屬性並將它們應用於陣列表示。 透過利用這些技術,開發人員可以使用自訂屬性來增強 Eloquent 模型,豐富其表示並增強應用程式功能。
以上是如何為 Eloquent 模型新增自訂屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!