REST 额外字段并加入 Yii2


REST extra fields and join in 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:

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

要返回特定字段,例如,在您的模型中,您可以覆盖 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;