我正在使用 Laravel 4.2。
我有两个模型:User 和 Video,这两个模型都具有一对多关系,即 User -> HasMany -> Video。
最近,我收到了一个要求,需要显示用户列表以及每个用户上传的视频文件大小总和,并允许用户通过文件大小总和升序或降序排序。
我已经在 User 模型中进行了以下更改:
我有两个模型:User 和 Video,这两个模型都具有一对多关系,即 User -> HasMany -> Video。
最近,我收到了一个要求,需要显示用户列表以及每个用户上传的视频文件大小总和,并允许用户通过文件大小总和升序或降序排序。
我已经在 User 模型中进行了以下更改:
class User extends Eloquent {
protected $hidden = array('videosSum');
protected $appends = array('videos_size');
public function videosSum() {
return $this->hasOne('Video')
->selectRaw('sum(file_size) as sum, user_id')
->groupBy('user_id');
}
public function getVideosSizeAttribute()
{
// if relation is not loaded already, let's do it first
if ( ! array_key_exists('videos_size', $this->relations)){
$this->load('videosSum');
}
$related = $this->getRelation('videosSum');
return $this->attributes['videos_size'] = isset($related->sum) ? (int) $related->sum : 0;
}
}
使用方法如下:
User::where('id', '!=', Auth::user()->id);
我得到了想要的结果。
但问题是,我不希望在调用User
模型时到处都有videos_size
属性。 我想要动态设置它。
我尝试过 User::$appends = ['videos_size']
但它会出现无法在类外部设置受保护属性的错误。
我还尝试在User
模型中创建一个方法,如果被调用就设置$appends
,但也没有效果。
有人能帮我如何动态启用 appends 属性吗?