加载时 Laravel/Eloquent 模型中的自定义属性
在最初尝试向 Eloquent 模型添加自定义属性时会出现挑战已加载。这可以避免使用循环手动填充属性的需要。虽然已经探索了模型事件,但尚未产生预期的结果。
解决方案
根本问题源于 toArray() 方法忽略不直接对应于数据库的访问器表列。然而,Laravel 提供了一个简单的解决方法:
Laravel >= 8.0
引入一个带有 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
4.08<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>重写 toArray() 方法以显式设置属性或循环遍历变异属性以检索其值:或通过实施这些解决方案,可以在加载时轻松将自定义属性添加到 Eloquent 模型中,从而无需手动填充属性。
以上是如何在加载时向 Laravel/Eloquent 模型添加自定义属性?的详细内容。更多信息请关注PHP中文网其他相关文章!