Приветствую,
Таблица 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 страница в пагинаторе.