Ошибка пагинации при together = true. Как исправить?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
XAKEPEHOK
Сообщения: 38
Зарегистрирован: 2012.08.16, 13:11
Откуда: КМВ
Контактная информация:

Ошибка пагинации при together = true. Как исправить?

Сообщение XAKEPEHOK »

Бьюсь уже третьи сутки. Гуглил до тошноты. Будьте добры, направьте в нужно русло.

Ситуация: на сайте есть пользователи. Пользователи имеют определенные характеристики, которые хранятся в связанных таблицах. Нужно найти пользователей, соответствующих определенным характеристикам.

Проблема: отражена ниже на скриншотах

Модель Users

Код: Выделить всё

public function relations() {
    return array(
        'usersMotivations' => array(self::HAS_MANY, 'UsersMotivations', 'userID'),
    );
} 
Действие контроллера

Код: Выделить всё

public function actionIndex() {
    $criteria = new CDbCriteria;
    $criteria->with = array('usersMotivations');
    $criteria->addInCondition('motivationID',array(1,2));
    $criteria->together = true;

    $dataProvider = new CActiveDataProvider('Users',array(
        'criteria'=>$criteria,
        'pagination'=>array('pageSize'=>10)
    ));

    $this->render('index', array( 'dataProvider' => $dataProvider));
}
Представление

Код: Выделить всё

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
));
И вот здесь происходит самое интересное. При 'pagination'=>array('pageSize'=>10) страница с результатами выглядит так:
1.png
1.png (28.99 КБ) 1382 просмотра
При 'pagination'=>array('pageSize'=>2) один из результатов дублируется на двух страницах
2.png
2.png (49.44 КБ) 1382 просмотра
Теперь если убрать строку $criteria->addInCondition('motivationID',array(1,2)); то один из результатов дублируется, а другой - исчезает вообще
3.png
3.png (41.91 КБ) 1382 просмотра
Опытным путем выяснил, что виной всему $criteria->together = true;, и если его убрать, то с пагинацией становится все нормально. Но тогда перестает работать условие поиска

Код: Выделить всё

$criteria->addInCondition('motivationID',array(1,2));
Как быть, подскажите пожалуйста?
Большинство неправильных шагов совершаются стоя на месте

Аватара пользователя
samdark
Администратор
Сообщения: 9404
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Ошибка пагинации при together = true. Как исправить?

Сообщение samdark »

Убрать together=true.

Аватара пользователя
XAKEPEHOK
Сообщения: 38
Зарегистрирован: 2012.08.16, 13:11
Откуда: КМВ
Контактная информация:

Re: Ошибка пагинации при together = true. Как исправить?

Сообщение XAKEPEHOK »

Как в таком случае осуществлять поиск по связанным данным?
Большинство неправильных шагов совершаются стоя на месте

Аватара пользователя
XAKEPEHOK
Сообщения: 38
Зарегистрирован: 2012.08.16, 13:11
Откуда: КМВ
Контактная информация:

Re: Ошибка пагинации при together = true. Как исправить?

Сообщение XAKEPEHOK »

Ураа!!! Подсказали ответ на хабре. Мне нужно было добавить всего-то

Код: Выделить всё

$criteria->group='t.id';
Большинство неправильных шагов совершаются стоя на месте

Ответить