您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

问题是由ModeltoArray()方法忽略所有与基础表中的列不直接相关的访问器而导致的。

正如泰勒·奥特威尔(Taylor Otwell)在这里提到的:“这是故意的,并且出于性能考虑。” 但是,有一种简单的方法可以实现此目的:

class EventSession extends Eloquent {

    protected $table = 'sessions';
    protected $appends = array('availability');

    public function getAvailabilityAttribute()
    {
        return $this->calculateAvailability();  
    }
}

只要您添加了适当的访问器,$ appends属性中列出的所有属性都将自动包含在模型的数组或JSON形式中。

我发现的最佳解决方案是重写toArray()方法并显式设置属性

class Book extends Eloquent {

    protected $table = 'books';

    public function toArray()
    {
        $array = parent::toArray();
        $array['upper'] = $this->upper;
        return $array;
    }

    public function getUpperAttribute()
    {
        return strtoupper($this->title);    
    }

}

或者,如果您有很多自定义访问器,请遍历所有访问器并应用它们:

class Book extends Eloquent {

    protected $table = 'books';

    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);    
    }

}
其他 2022/1/1 18:24:05 有215人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶