我创建了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',
));
答案 0 :(得分:1)
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 :(得分:1)
我将从这篇wiki文章中的步骤开始: http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/
然后,您需要将连接表groupID列添加到gridview和用户搜索标准。您可能还需要在搜索条件中添加with和together = true行。
请注意,他已向模型添加新模型属性以保存搜索条件。如果您使用的是下拉过滤器,则可以直接指定连接表属性的名称。
答案 2 :(得分:0)
我如何获得具有特定群组的所有用户?
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"