我的数据库中有这个模式。
- time_sheet
- 任务
- 位置
- 次序
有多个时间表,一个时间表只有一个任务。
一个职位有多个特派团,一个特派团只有一个职位。
一个订单有多个仓位,一个仓位只有一个订单。
在我的类中,从yii'rest'IndexAction
扩展,我有以下代码(在prepareDataProvider()
方法中):
$query = $timeSheetModel->find()
->distinct()
->joinWith("mission")
->joinWith("mission.position")
->joinWith("mission.position.order")
->where("public.order.id = $id");
$results = new ActiveDataProvider([
'query' => $query,
]);
return $results;
那么如何个性化我的额外字段以获得具有以下结构的 json:
- 时间表
- 任务
- 位置
- 资源
- 次序
要返回特定字段,例如,在您的模型中,您可以覆盖 fields 方法:
public function fields()
{
return [
'misson' => function($model) {
return $model->mission->id; // or anything else from the mission relation
},
... etc.
];
}
有关字段和额外字段方法的更多信息,请参见 yii2 文档 - http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields
Use ArrayDataProvider (http://www.yiiframework.com/doc-2.0/yii-data-arraydataprovider.html)
$query = new 'yii'db'Query();
$query = $timeSheetModel->find()
->distinct()
->joinWith("mission")
->joinWith("mission.position")
->joinWith("mission.position.order")
->where("public.order.id = $id");
$results = new ArrayDataProvider([
'allModels' => $query->all(),
// Add pagination information if required
]);
$datas = $results->allModels;
foreach($datas as &$data) {
// Do your formatting here
}
$results->allModels = $datas;
return $results;