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

Susan Sarandon
发布: 2024-10-29 12:43:29
原创
722 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板