首页  >  文章  >  后端开发  >  如何在加载时向 Laravel/Eloquent 模型添加自定义属性?

如何在加载时向 Laravel/Eloquent 模型添加自定义属性?

Patricia Arquette
Patricia Arquette原创
2024-11-04 05:41:29508浏览

How to Add Custom Attributes to Laravel/Eloquent Models on Load?

加载时 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn