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

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

Barbara Streisand
Barbara Streisand原創
2024-11-04 13:15:29446瀏覽

How to Add a Custom Attribute to a Laravel/Eloquent Model on Load?

在加載時向Laravel/Eloquent 模型添加自訂屬性

問題分析

在Laravel/Eloquent 中,自訂屬性與模型不直接相關將模型轉換為toArray() 或JSON 格式時,基礎表中的欄位將被排除。

解決方案

Laravel 8 及更高版本:

使用屬性類,用於建立自訂存取器,在物件載入時自動計算和分配屬性。

<code class="php">class EventSession extends Eloquent {
  public function availability() {
    return new Attribute(
      get: fn () => $this->calculateAvailability()
    );
  }
}</code>

Laravel 7 及以下版本:

選項1 : 將屬性追加到$appends 屬性

<code class="php">class EventSession extends Eloquent {
  protected $appends = ['availability'];
  public function getAvailabilityAttribute() {
    return $this->calculateAvailability();
  }
}</code>

選項 2:重寫 toArray()方法

重寫 toArray() 方法並明確設定或迭代自訂屬性。

<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>

選項 3:循環遍歷變異屬性

循環模型的變異屬性並將它們應用到 toArray() 數組。

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

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