CActiveDataProvider и MANY_MANY

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
undsoft
Сообщения: 20
Зарегистрирован: 2009.09.16, 14:16

CActiveDataProvider и MANY_MANY

Сообщение undsoft » 2011.03.15, 13:15

Добрый день,

Есть две таблицы Users и Email_groups. Между ними есть отношение email_groups, определенное как MANY_MANY.

Я хочу в CActiveDataProvider получить пользователей одной группы.

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

$r = Users::model()->findAll(array(
            'with'=>array(    
                'email_groups'=>array(
                    'alias'=>'group',
                    'condition'=>'group.id = :group_id',
                    'params'=>array(
                        ':group_id'=>$group->id
                    ),
                    'joinType'=>'INNER JOIN'
                )
            )
        ));
            
        $members = new CActiveDataProvider('Users', array(
            'criteria'=>array(    
                'with'=>array(    
                    'email_groups'=>array(
                        'alias'=>'group',
                        'condition'=>'group.id = :group_id',
                        'params'=>array(
                            ':group_id'=>$group->id
                        ),
                        'joinType'=>'INNER JOIN'
                    )
                )
            )
        ));
        
        $r2 = $members->data;
 
Результат в $r - пустой массив (как и должно быть).
Результат в $r2 - массив из всех пользователей, что есть в базе.

Почему так?
При том, что я разбирал дебаггером работу CActiveDataProvider и нашел, что там вызывается:

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

return $this->model->findAll($criteria); 
То есть, вызов вроде такой же как в $r, но уже вот здесь, возвращаемое значение - опять все пользователи. Мистика.

Аватара пользователя
undsoft
Сообщения: 20
Зарегистрирован: 2009.09.16, 14:16

Re: CActiveDataProvider и MANY_MANY

Сообщение undsoft » 2011.03.15, 20:31

Отвечу сам себе. Использование
together=>true
в критерии CActiveDataProvider магическим образом решает проблему.

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: CActiveDataProvider и MANY_MANY

Сообщение slavcodev » 2011.03.15, 20:55

ответ есть, может кто-то из ассов MySQL ответит почему так, для чего это магический together=>true нужен.
а то у меня сегодня с утра тоже была такая проблема :(
Жду Yii 3!

Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CActiveDataProvider и MANY_MANY

Сообщение because » 2011.03.15, 21:28

together определяет способ выполнения запроса по связи. если false то он выполнится как отдельный select, если true то все выполнится одним большим запросом. я понял для себя так.
RTFM !

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: CActiveDataProvider и MANY_MANY

Сообщение slavcodev » 2011.03.15, 21:37

ну тогда это баг, что без него провайдер тупит
Жду Yii 3!

Ответить