首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级搜索中的多对多关系

高级搜索中的多对多关系
EN

Stack Overflow用户
提问于 2012-03-19 00:02:42
回答 3查看 1.3K关注 0票数 0

我创建了3个表:

代码语言:javascript
复制
User
User-Group
Group

我可以有一个多对多的关系。

但是我如何在搜索方法上创建一个查找呢?如何获取具有特定组的所有用户,如

代码语言:javascript
复制
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 ?

到目前为止我的代码如下:

代码语言:javascript
复制
    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',
            ));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-01 14:24:24

我将从这篇维基文章中的步骤开始:http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/

然后,您需要将连接表groupID列添加到网格视图和用户搜索条件中。您可能还需要在搜索条件中添加with和together=true行。

请注意,他让您向模型添加一个新的模型属性来保存搜索条件。如果您正在使用下拉筛选器,则可以直接指定连接表属性的名称。

票数 1
EN

Stack Overflow用户

发布于 2012-03-20 06:34:36

代码语言:javascript
复制
User::model()->with(array(
   'group'=>array(
      'alias'=>'g',
      'condition'=>'g.name=:gName',
      'params'=>array(':gName'=>'group_1')
   )
))->findAll();

代码语言:javascript
复制
$crit = new CDbCriteria();
$crit->alias = 'g';
$crit->addColumnCondition(array('g.name'=>'group_1'));
User::model()->with(array('group'=>$crit))->findAll();   

代码语言:javascript
复制
$crit = new CDbCriteria();
$crit->with = array(
       'group'=>array(
          'alias'=>'g',
          'condition'=>'g.name=:gName',
          'params'=>array(':gName'=>'group_1')
       )
    );
User::model()->findAll($crit);

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2012-03-19 00:25:18

如何获取具有特定组的所有用户?

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9759785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档