Yii CSqlDataProvider自定义限制

时间:2014-02-05 20:37:11

标签: php sql yii

有没有办法限制CSqlDataProvider?例如,当我强制将totalItemCount强制为3时,不会考虑结果。

$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
$sql='SELECT * FROM tbl_user';
$dataProvider=new CSqlDataProvider($sql, array(
  'totalItemCount'=>3,    
  'pagination'=>array(
    'pageSize'=>10,
   ),
));

当我尝试限制查询LIMIT 3并注释totalItemCount行时,我收到:

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: ... LIMIT 3 LIMIT 10

似乎无论我做什么,sql都附加了LIMIT 10。

2 个答案:

答案 0 :(得分:2)

在使用CSqlDataProvider时,您可以限制sql中的总项目数。 正如Yii的官方文件所写:

  

与其他数据提供程序一样,CSqlDataProvider也支持排序和分页。它通过使用“ORDER BY”和“LIMIT”子句修改给定的sql语句来实现。您可以配置sort和pagination属性以自定义排序和分页行为。

CSqlDataProvider

所以你可以通过改变你的sql来轻松完成:

$sql='SELECT * FROM tbl_user LIMIT 3';

答案 1 :(得分:1)

解决方案是在sql语句的末尾添加; ,这样cpagination就不会添加默认的LIMIT 10子句。

 $sql = 'SELECT * FROM tbl_user LIMIT 3;';