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

作者: hedeqiang

发布时间: 2019-02-27 23:08:06

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

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

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 进行限制条数:

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

$query = Post::find()->limit(10);
$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => false,
]);

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

$dataProvider = new ActiveDataProvider([
        'query' => $query,
         'pagination' => [
             'pageSize' => 30, 
         ],
    ]);
$dataProvider->setTotalCount(200);

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

关于极客返利

极客返利 是由我个人开发的一款网课返利、返现平台。包含 极客时间返现、拉勾教育返现、掘金小册返现、GitChat返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。

https://geek.laravelcode.cn

https://geek.idaka.ink

版权许可

本作品采用 知识共享署名 4.0 国际许可协议 进行许可。

转载无需与我联系,但须注明出处,注明文章来源 Yii2 中 ActiveDataProvider 如何使用分页 limit 限制条数