Yii:更改用于分页的Sql请求

时间:2012-07-25 20:19:22

标签: php pagination yii

我正在尝试使用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)

所以我的问题是:我如何更改请求以获取新闻总数?

2 个答案:

答案 0 :(得分:2)

答案很简单!我所要做的就是使用我想要的请求在我的Provider中设置totalitemCount值:

$dataProvider = new CActiveDataProvider(News::model(), array(
                        'pagination' => array(
                                'pageSize' => 10,
                        ),
                        'criteria' => $criteria,
                        'totalItemCount' => News::model()->count('etat = 1'),
                ));

答案 1 :(得分:0)

你可以试试这个......

$itemCount = $dataProvider->getTotalItemCount();