【问题标题】:Laravel 4.1 eloquent model set appends dynamicallyLaravel 4.1 eloquent 模型集动态追加
【发布时间】:2015-12-08 18:14:59
【问题描述】:

我正在使用Laravel 4.2

我有两个模型:UserVideo,这两个模型都有one-to-many relationship,即User -> HasMany-> Video

最近,我需要显示用户列表以及每个用户上传的总视频的文件大小总和,并允许用户按文件大小总和升序或降序排列。

我对@9​​87654326@ 模型进行了以下更改:

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'],但它给出了protected property cannot be set outsize of class错误

我还尝试在User 模型中创建一个方法,如果调用该方法设置$appends,但它也不起作用。

谁能帮助我如何动态启用 appends 属性?

【问题讨论】:

  • 有可以使用 laravel 的专家吗?
  • 您是否尝试过将 appends 设置为 public 以更改它?
  • 我不确定这是否可能,让我检查一下。

标签: laravel


【解决方案1】:

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

基本上,您必须覆盖您的 models.php toArray() 方法,因为当您请求 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多