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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我希望能够在加载时为Laravel / Eloquent模型添加自定义属性/属性

例如:

public function index()
{
    $sessions = EventSession::all();
    foreach ($sessions as $i => $session) {
        $sessions[$i]->available = $session->getAvailability();
    }
    return $sessions;
}

我试过使用手册中描述的一些模型事件来在对象加载时附加此属性,但目前为止没有成功。

提问于
用户回答回答于

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

}
用户回答回答于

这个:

protected $appends = array('is_admin');

这可以被自动用于向模型添加新的访问器。

创建getFooBarAttribute(...)存取器并添加foo_bar$appends

扫码关注云+社区