麦麦提
有的 利用
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屬性以及新加的屬性
thanks, it is a good solution.
- 麦麦提 赞了回答
有的 利用
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屬性以及新加的屬性
如果是 從資料表撈出大筆數據, 昨天發現一個方法你也可以參考看看
selecting-extra-fields
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#selecting-extra-fieldsthanks,but maybe it don't work.
---php
public function behaviors() { $behaviors = parent::behaviors(); $behaviors['contentNegotiator']['formats'] = ['application/json' => Response::FORMAT_JSON]; return $behaviors; }