2016-07-13 10:51:04 9127次浏览 3条回答 2 悬赏 10 金钱

yii2 fields返回关联数据,能否根据不同的场景,使得model携带不同的数据返回?
例如:

public function fields(){
    $fields = parent::fields();
    if($this->scenario == self::SCENARIO_INDEX){
        array_push($fields,'lectures');
    }else{
        array_push($fields,'lectures','course');
    }
    return $fields;
}

但是现在问题在于,关联数据,比如lectures,如何进一步指定呢?

补充于 2016-07-14 14:35

希望是这样,但是不知道有没有更好的办法,解决这个问题

最佳答案

  • bryson 发布于 2016-07-14 14:43 举报

    有的 利用 toArray($fields, $expand, $recursive )$expand , 跟model的 extraFields method

    Model 部分

    public function extraFields(){
        return [
            'lectures' => function(){
                return $this->name . ' ' . $this->name;
            },
            'course' => 'xxx'
        ];
     }
    

    Controller 部分

    public actionXxx(){
    
        $model->attributes = $data;  //$data == 數據
        if($model->scenario == self::SCENARIO_INDEX){
            $model->toArray([],['lectures']);
        }else{
            $model->toArray([],['lectures','course']);
        }
    }
    

    這方法可以第一眼在 controller 的 action 知道會回傳內容甚麼值
    這樣也可以區分 原table屬性以及新加的屬性

    1 条回复
    回复于 2016-09-11 13:52 回复

    thanks, it is a good solution.

    觉得很赞
  • 回答于 2016-07-14 14:27 举报
    if($this->scenario == self::SCENARIO_INDEX){
        $fields['lectures'] = 'xxx'; 
    }else{
        $fields['lectures'] = 'xxx';
        $fields['course'] = $this->lectures . $this->course'; 
    }
    

    這樣是你要的?

    2 条回复
    回复于 2016-07-14 14:35 回复

    希望是这样,但是不知道有没有更好的办法来解决这个问题?

    回复于 2017-09-29 11:22 回复

    如果要的是上面那样,可以在Model部分实现啊

    controller 依然使用 的写法:

    Model修改:
    public function extraFields(){

    return [
        'lectures' => function(){
            return $this->name . ' ' . $this->name;
        },
        'course' => 这里可以用很多方法实现。(xxx::find()->select()->where()->one())或 (callback)
    ];
    

    }

  • 回答于 2016-07-15 09:40 举报

    如果是 從資料表撈出大筆數據, 昨天發現一個方法你也可以參考看看
    selecting-extra-fields
    http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#selecting-extra-fields

    1 条回复
    回复于 2016-09-11 12:56 回复

    thanks,but maybe it don't work.

您需要登录后才可以回答。登录 | 立即注册
jackiegao
副总裁

jackiegao

注册时间:2016-10-31
最后登录:2017-06-05
在线时长:53小时9分
  • 粉丝5
  • 金钱4745
  • 威望80
  • 积分6075

热门问题