Отношение ко многим ко многим в расширенном поиске - PullRequest
0 голосов
/ 18 марта 2012

Я создал 3 таблицы:

User
User-Group
Group

Где я могу иметь отношение «многие ко многим».

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

select u.* from users as u, user-group as ug, group as g
where g.name = "group_1" and ug.group_id = g.id and ug.user_id = u.id ?

Мой код:

    public function relations()
    {
            // NOTE: you may need to adjust the relation name and the related
            // class name for the relations automatically generated below.
            return array(
                    'group'=>array(self::MANY_MANY, 'Group', 'tbl_profile(id_user, id_group)'),
                    'groupList' => array( self::HAS_MANY, 'Group', 'id_user' ),

    }

    $criteria->with=array('groupList' => array(
                    'condition' => 'id_user = 1',
            ));

Ответы [ 3 ]

1 голос
/ 20 марта 2012
User::model()->with(array(
   'group'=>array(
      'alias'=>'g',
      'condition'=>'g.name=:gName',
      'params'=>array(':gName'=>'group_1')
   )
))->findAll();

или

$crit = new CDbCriteria();
$crit->alias = 'g';
$crit->addColumnCondition(array('g.name'=>'group_1'));
User::model()->with(array('group'=>$crit))->findAll();   

или

$crit = new CDbCriteria();
$crit->with = array(
       'group'=>array(
          'alias'=>'g',
          'condition'=>'g.name=:gName',
          'params'=>array(':gName'=>'group_1')
       )
    );
User::model()->findAll($crit);

или

$crit1 = new CDbCriteria();
$crit1->alias = 'g';
$crit1->addColumnCondition(array('g.name'=>'group_1'));
$crit2 = new CDbCriteria();
$crit2->with = array('group'=>$crit1);
User::model()->findAll($crit2);
1 голос
/ 01 апреля 2012

Я бы начал с шагов в этой вики-статье: http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/

Затем вам нужно добавить столбец groupID таблицы присоединения к вашему сеточному виду и критериям поиска пользователя. Возможно, вам также понадобится добавить строку с и вместе = true в критерии поиска.

Обратите внимание, что он попросил вас добавить новый атрибут модели в вашу модель для хранения критериев поиска. Если вы используете раскрывающийся фильтр, вы можете напрямую указать имя атрибутов таблицы присоединения.

0 голосов
/ 18 марта 2012

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

select u.* from group g
join user-group ug on g.id = ug.group_id
join users u on u.id = ug.user_id
where g.name = "group_1"
...