Yii2.如何在dataProvider中设置方案?

Ale*_*lov 5 yii2

我想根据场景返回不同的字段.如何在dataProvider中设置它?

$query = User::find();
$activeData = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 10,
     ],
]);
Run Code Online (Sandbox Code Playgroud)

用户模型中的字段:

public function fields()
{
    if ($this->scenario == 'statistics') {
        return [
            'id',
            'email',
            'count'
        ];
    }
    return [
        'id',
        'name'
    ];
}
Run Code Online (Sandbox Code Playgroud)

Sal*_*ani 2

使用$select属性怎么样?

$query = User::find()->select(['id','email','count']);
$activeData = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 10,
     ],
]);
Run Code Online (Sandbox Code Playgroud)

或者更好的是,为它们创建一个ActiveQuery类:

class UserQuery extends ActiveQuery
{
     public function statistics()
     {
        return $this->select(['id','email','count']);
     }

     /* add as many filtering functions as you need here */
}
Run Code Online (Sandbox Code Playgroud)

然后重写类find()中的方法User来使用它:

public static function find()
{
    return new \app\models\UserQuery(get_called_class());
}
Run Code Online (Sandbox Code Playgroud)

然后做:

$activeData = new ActiveDataProvider([
    'query' => User::find()->statistics(),
    'pagination' => [
        'pageSize' => 10,
     ],
]);
Run Code Online (Sandbox Code Playgroud)

注意:在 Yii2 RESTful API 的默认实现中,您还可以通过执行以下操作来选择 url 中的必填字段:GET /users?fields=id,email,count