2012-03-18 32 views
0

一對多的關係,我創建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', 
      )); 
+1

Upvotes總是感激,謝謝! – acorncom 2012-04-09 13:04:39

回答

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" 
+0

那就是不我想要什麼。 – Lefsler 2012-03-18 19:22:42

+0

我想把yii框架上的搜索條件放在一個比較中,以獲得組中的所有用戶。維護交叉數據庫。我知道如何使用查詢來創建它,但是我怎樣才能在yii的框架上使用比較方法 – Lefsler 2012-03-18 19:24:04

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);