Yii2 中 ActiveDataProvider 如何使用分页 limit 限制条数

2019-12-17 21:46:54 浏览数 (4)

应用场景,我们某个数据表只想返回 200 条数据?我们该怎样做呢? 我们可能会想到使用 limit 来进行限制,接下来就一起尝试下,看看效果如何

如果我们使用 GII 生成 CRUD ,那么我们应该会有一个 search 类,他可能类似于如下:

代码语言:javascript复制
public function search($params)
{
    $query = Post::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    $this->load($params);

    if (!$this->validate()) {
        return $dataProvider;
    }
    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'title' => $this->title,
        'created_at' => $this->created_at,
        'updated_at' => $this->updated_at,
    ]);

    return $dataProvider;
}

然后我们使用 limit 进行限制条数:

代码语言:javascript复制
public function search($params)
{
    $query = Post::find()->limit(10);
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    .
    .
    .
    return $dataProvider;
}

然后运行程序,发现并没有生效、并不起作用 然后我在这里找到了答案 https://stackoverflow.com/questions/33748211/limit-is-not-working-in-activedataprovider

解决方法:

你可以将 'pagination' 设置为 false

代码语言:javascript复制
$query = Post::find()->limit(10);
$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => false,
]);

然后使用 limit 方可生效,以上方式 条数是限制了,但是分页没了,所以如果还想保留分页采用如下方式:

代码语言:javascript复制
$dataProvider = new ActiveDataProvider([
        'query' => $query,
         'pagination' => [
             'pageSize' => 30, 
         ],
    ]);
$dataProvider->setTotalCount(200);

以上就是 Yii2ActiveDataProvider 如何使用分页 limit 限制条数

1 人点赞