yii2 fields返回关联数据,能否根据不同的场景,使得model携带不同的数据返回? [ 2.0 版本 ]
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,如何进一步指定呢?
jackiegao 补充于 2016-07-14 14:35
希望是这样,但是不知道有没有更好的办法,解决这个问题
最佳答案
-
有的 利用
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 条回复麦麦提 觉得很赞
其他 2 个回答
-
if($this->scenario == self::SCENARIO_INDEX){ $fields['lectures'] = 'xxx'; }else{ $fields['lectures'] = 'xxx'; $fields['course'] = $this->lectures . $this->course'; }
這樣是你要的?
共 2 条回复@jackiegao 如果要的是上面那样,可以在Model部分实现啊
controller 依然使用 @bryson 的写法:
Model修改:
public function extraFields(){return [ 'lectures' => function(){ return $this->name . ' ' . $this->name; }, 'course' => 这里可以用很多方法实现。(xxx::find()->select()->where()->one())或 (callback) ];
}
-
如果是 從資料表撈出大筆數據, 昨天發現一個方法你也可以參考看看
selecting-extra-fields
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#selecting-extra-fields共 1 条回复
jackiegao
注册时间:2016-10-31
最后登录:2017-06-05
在线时长:53小时9分
最后登录:2017-06-05
在线时长:53小时9分
- 粉丝5
- 金钱4745
- 威望80
- 积分6075