2

Yiiでページネーションを使おうとしていますが、すべて正常に機能しています。しかし(常にありますが^^)オブジェクトの数を取得するために実行されるリクエストは最適化されていません:私のコントローラーには次のコードがあります:

<?php
$criteria = new CDbCriteria(array(
                        'with' => array('series', 'author', 'stars'),
                        'condition' => "etat = " . 1,
                ));
$dataProvider = new CActiveDataProvider(News::model(), array(
                        'pagination' => array(
                                'pageSize' => 10,
                        ),
                        'criteria' => $criteria,
                ));
?>

そして、CPaginationによるページネーションのために実行されるリクエストは次のとおりです。

SELECT COUNT(DISTINCT `t`.`id`) 
FROM `news` `t` 
LEFT OUTER JOIN `news_serie` `series_series` ON (`t`.`id`=`series_series`.`id_news`)
LEFT OUTER JOIN `serie` `series` ON (`series`.`id`=`series_series`.`id_serie`)
LEFT OUTER JOIN `user` `user` ON (`t`.`id_user`=`user`.`id`)
LEFT OUTER JOIN `news_stars` `stars_stars` ON (`t`.`id`=`bonhommes_bonhommes`.`id_news`) LEFT OUTER JOIN `stars` `stars` ON (`stars`.`id`=`stars`.`id_stars`) 
WHERE (etat = 1)

この場合、このリクエストは複雑になります。使用したいのは次のとおりです。

SELECT COUNT(DISTINCT `t`.`id`) FROM `news` `t`  WHERE (etat = 1)

だから私の質問は:ニュースの総数を取得するためにリクエストを変更するにはどうすればよいですか?

4

2 に答える 2

2

答えは本当に簡単です!私がしなければならなかったのは、私が望んでいた要求で私のプロバイダーに totalitemCount 値を設定することだけです:

$dataProvider = new CActiveDataProvider(News::model(), array(
                        'pagination' => array(
                                'pageSize' => 10,
                        ),
                        'criteria' => $criteria,
                        'totalItemCount' => News::model()->count('etat = 1'),
                ));
于 2012-07-25T20:56:07.450 に答える
0

あなたはおそらくこれを試すことができます...

$itemCount = $dataProvider->getTotalItemCount();
于 2012-07-26T05:02:20.427 に答える