应用场景,我们某个数据表只想返回 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
代码语言:javascript复制$query = Post::find()->limit(10);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => false,
]);
然后使用 limit
方可生效,以上方式 条数是限制了,但是分页没了,所以如果还想保留分页采用如下方式:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 30,
],
]);
$dataProvider->setTotalCount(200);
以上就是 Yii2
中 ActiveDataProvider
如何使用分页 limit
限制条数