2014-02-05 59 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;';