How to display count of rows which satisfies a condition in CActiveDataProvider

Let’s assume we have model with customers and car numbers.

I have the ordinary controller:

public function actionVieworders() {




Search function of model which returns CActiveDataProvider:

public function search() {

    $criteria = new CDbCriteria;

    $criteria->with[] = 'tcustomersrel';

    $criteria->with[] = 'orderedproducts';


    return new CActiveDataProvider(get_class($this), array(




        'pagination' => array(

             'pageSize' => 20)



And gridview widget in the view:

$this->widget('zii.widgets.grid.CGridView', array(







As a result I see the correct number of rows in Summary as described in renderSummary of CBaseListView.php. In case of the following result rows count is 4:


| customer 1 | car 1 |

| customer 2 | car 2 |

| customer 2 | car 1 |

| customer 1 | car 1 |


In addition of this result I need to display the number of unrepeated rows by customers and car numbers. In above-mentioned case I want to get 3.

I failed trying to iterate through getData() in view, because getData() is displayed only data from current page in case of using CActiveDataProvider with pagination.

I failed trying to create criteria in model and pass count to view:

$newCriteria = clone $criteria;

$newCriteria->select='DateOfSend, IdCustomers, Time1, IdCar';

$newCriteria->group='DateOfSend, IdCustomers, Time1, IdCar';


I’m new in Yii and I didn’t know the correct way to organize a solution. After some research I didn’t get necessary answers.

Please could help me how to accomplish this.

I have solved the problem in a horrible way by changing CGridView and CActiveDataProvider in framework core. I wrote function similar to the getTotalItemCount() in framework/web/CDataProvider.php:

public function getRealItemCount($refresh=false)


    if($this->_realTotalItemCount===null || $refresh)


    return $this->_realTotalItemCount;


And in framework/web/CActiveDataProvider.php wrote equivalent of the calculateTotalItemCount():

protected function calculateRealItemCount()


    $baseCriteria=clone $this->getCriteria();

    $baseCriteria->select='`t`.`DateOfSend`, `t`.`IdCustomers`, `t`.`Time`, `t`.`IdCar`';

    $baseCriteria->group='`t`.`DateOfSend`, `t`.`IdCustomers`, `t`.`Time`, `t`.`IdCar`';


    return count($count);


So in framework/zii/widgets/CBaseListView.php I can call $this->dataProvider->getRealItemCount() (like $this->dataProvider->getTotalItemCount()).

As I understood for the correct solution I need to extend widget and data provider.