我正在尝试从表中选择几行并在多个页面中进行渲染(分页)。 这是模型中的代码:
return new CActiveDataProvider('Downloads',
array(
'criteria' => array(
'select' => 'download_id,title,thumb_ext',
'order' => 'download_id DESC',
'limit' => $count,
),
'pagination' => array('pageSize' => 5,),
)
);
在视图中,我使用CGridView显示它:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns' => array('download_id', 'title', 'thumb_ext'),
));
问题是CActiveDataProvider忽略了条件限制并返回表的所有行...
感谢。
答案 0 :(得分:7)
我不是肯定的...但我认为Yii使用LIMIT子句来执行SQL结果分页,因此它将覆盖/替换您的LIMIT子句。您可以通过打开CWebLogRoute日志路由来检查这一点,以确切了解正在执行的SQL。
无论如何,我不太确定这是怎么回事。你添加的LIMIT条款是什么?如果你正在进行分页,为什么不让用户对所有记录进行分页? 解决方案可能是改变您的标准以摆脱LIMIT条款。
您是否尝试设置每页的结果数量?您已将pageSize设置为5但是......
另一件可能会做你想做的事情就是查看基本的Pager类,CPagination。使用CLinkPager,它可以让您比使用CGridView的CListPager更具创造性地进行分页。
祝你好运!答案 1 :(得分:5)
我遇到了同样的问题,我找到了一个解决方案如下:
return new CActiveDataProvider('Downloads',
array(
'criteria' => array(
'select' => 'download_id,title,thumb_ext',
'order' => 'download_id DESC',
),
'pagination' => array('pageSize' => 5,),
'totalItemCount' => $count,
)
);
并将CGridView设置为分页隐藏:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'enablePagination' => false,
'columns' => array('download_id', 'title', 'thumb_ext'),
));
答案 2 :(得分:2)
数据提供程序的一个基本功能是,您可以通过在配置中指定“totalItemCount”来覆盖行数的计算。通常(我还没有测试过)这也适用于ActiveDataProvider:
return new CActiveDataProvider('Downloads',
array(
'criteria' => array(
'select' => 'download_id,title,thumb_ext',
'order' => 'download_id DESC',
),
'pagination' => array('pageSize' => 5,),
'totalItemCount' => $count,
)
);