2015-09-28 53 views
1

我正在使用Laravel 4.2Laravel 4.1雄辩模型集动态追加

我有两种型号:UserVideo,这两种型号都有one-to-many relationshipUser -> 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); 

我得到了想要的结果。

但问题是,我不希望videos_size属性无处不在,User模型被调用。 我想动态设置它

我试图User::$appends = ['videos_size']但它给保护财产不能设置如雷贯耳类错误的。

我也试过在User模型中设置$appends的方法,但如果调用它也不起作用。

任何人都可以帮助我如何动态启用append属性?

+0

任何专家可用于laravel? – Dev

+0

您是否尝试设置公共附件来更改它? – mimo

+0

我不确定它是否可行,让我检查一下。 – Dev

回答

3

Laravel不支持这一点。 我的朋友和我写了这个extention: Dynamically hide certain columns when returning an Eloquent object as JSON?

基本上你要重写你的models.php指定者当你要求在JSON或数组形式的模型附加属性计算得到()方法。 您可以添加到该链接中的特征并使用它,或者只将这些方法放入您的相应模型类中。

public static function getStaticAppends() { 
    return self::$_appends; 
} 

public static function setStaticAppends(array $value) { 
    self::$_appends = $value; 
    return self::$_appends; 
} 

public static function getDefaultAppends() { 
    return with(new static)->getAppends(); 
} 

public function getAppends(){ 
    return $this->appends; 
} 

public function toArray() { 
    if (self::getStaticAppends()) { 
     $this->appends = self::getStaticAppends(); 
    } 
    return parent::toArray(); 
}