REST额外字段并加入Yii2

时间:2015-01-25 15:38:41

标签: php rest yii2

我的数据库中有这个架构。

  • 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:

  • 时间表
    • 任务
    • 位置
    • 资源
    • 顺序

2 个答案:

答案 0 :(得分:1)

要返回特定字段,例如在模型中可以覆盖字段方法:

public function fields()
{
    return [
        'misson' => function($model) {
            return $model->mission->id; // or anything else from the mission relation
        },
        ... etc.
    ];
}

有关字段和extraFields方法的更多信息,请参见yii2 doc - http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields

答案 1 :(得分:0)

使用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;