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 プロパティに属性を追加
$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() 配列に適用します。
<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/Eloquentモデルにカスタム属性を追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。