首页 >后端开发 >php教程 >如何在对象加载时检索 Laravel 模型中的自定义属性?

如何在对象加载时检索 Laravel 模型中的自定义属性?

Susan Sarandon
Susan Sarandon原创
2024-10-29 12:43:29732浏览

How to Retrieve Custom Attributes in Laravel Models on Object Load?

在对象加载时检索 Laravel 模型中的自定义属性

问题:

您希望在模型加载时访问 Laravel/Eloquent 模型上的自定义属性/属性,而不依赖于手动循环。

解决方案:

Laravel 8 :

使用 getter 函数将自定义属性定义为属性:

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

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