我想根据场景返回不同的字段.如何在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)
使用$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
归档时间: |
|
查看次数: |
968 次 |
最近记录: |