オブジェクトのロード時に Laravel モデルのカスタム属性を取得する
問題:
手動ループに依存せずに、モデルの読み込み時に Laravel/Eloquent モデルのカスタム属性/プロパティにアクセスします。
解決策:
Laravel 8 :
ゲッター関数を使用してカスタム属性を属性として定義します:
<code class="php">class EventSession extends Eloquent { public function availability() { return new Attribute( get: fn() => $this->calculateAvailability() ); } }</code>
Laravel 8-:
方法 1: カスタム属性を $appends 配列に追加し、対応するアクセサーを作成します:
<code class="php">class EventSession extends Eloquent { protected $appends = ['availability']; public function getAvailabilityAttribute() { return $this->calculateAvailability(); } }</code>
メソッド 2: 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() の変更された属性を反復処理します:
<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; } public function getUpperAttribute() { return strtoupper($this->title); } }</code>
以上がオブジェクトのロード時にLaravelモデルのカスタム属性を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。