2014-02-05 61 views
3

有没有办法限制CSqlDataProvider?当我强制totalItemCount为3例如结果不考虑。Yii CSqlDataProvider自定义限制

$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

+0

你已经解决了吗? –

+0

是的,试试我的答案或将分页设置为false然后设置限制。 –

回答

2

虽然你正在使用CSqlDataProvider,你可以限制你的sql中的总项目。 Yii的官方文档写道:

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

CSqlDataProvider

所以,你可以很容易地改变你的SQL像下面这样做:

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

您的解决方案给出:CDbCommand无法执行SQL语句:SQLSTATE [42000]:语法错误或访问冲突:... LIMIT 3 LIMIT 10 –

+0

您有语法错误,请检查您的sql.As它表示您有两个限制SQL。或删除'totalItemCount'=> 3 –

+0

如果我删除了限制3,查询运行但返回10个结果。是的,我删除了'totalItemCount'行。 –

1

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

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