CListView, CPagination, CDbCriteria

Приветствую,

Таблица tag : id,name; Содержит 2 записи

[list=1]

[*]1, Tag1

[*]2, Tag2

[/list]

Таблица item: id,name; Содержит 2 записи

[list=1]

[*]1, Item1

[*]2, Item2

[/list]

Таблица item_has_tag : item_id, tag_id; Содержит 3 записи

[list=1]

[*] 1, 1

[*] 1, 2

[*] 2, 1

[/list]

Модели


class Tag extends CActiveRecord

{

	public function relations()

	{

		return array(

			'items' => array(self::MANY_MANY, 'Item', 'item_has_tag(tag_id, item_id)'),

		);

	}

}


class Item extends CActiveRecord

{

	public function relations()

	{

		return array(

			'tags' => array(self::MANY_MANY, 'Tag', 'item_has_tag(item_id, tag_id)'),

		);

	}

}


class ItemHasTag extends CActiveRecord

{

}

Задача стояла составить критерий выборки, который вернет такой Item, у которого присутствуют оба заданных тэга


$include_tags = array(1, 2); //Идентификаторы тэгов


$criteria = new CDbCriteria;

$criteria->with['tags'] = array(

	'select' => false,

	'together' => true,

	'condition' => 'tags.id IN('. implode(',', $include_tags) .')',

);

if ($allTags)

{

	$criteria->with['tags']['having'] = 't.id = '. count($include_tags);

}


$dataProvider = new CActiveDataProvider('Item', array(

	'criteria' => $criteria, 

	'pagination' => array(

		'pageSize' => 1,

		'pageVar' => 'page',

	),

));


/* тут начинаются непонятки с пагинатором */

echo $dataProvider->getItemCount(); # Результат - 1 запись

echo $dataProvider->getTotalItemCount(); # результат - 1 запись


echo $dataProvider->getPagination()->getPageCount(); #Результат - 2 страницы, хотя если Item'ов у нас 1, то и страница одна должна быть

Подскажите как побороть это и чтоб в итоге у меня получилась как и положено 1 страница в пагинаторе.

Проблема решена,

в багтрекере числится как "Issue 2904"

_h_t_t_p://code.google.com/p/yii/issues/detail?id=2904