2017-04-05 83 views
0

用戶我有一個DB是有user表和group表和組表有一列user_id這使得它只是一組在返回的用戶列表:Yii2查詢在

$users = User::find() 
    ->where(['{{user}}.group_id' => $group_id]) 
    ->all(); 

現在,user_id列已不存在,並且存在第三個表group_user,其中user_idgroup_id列爲關係。

我嘗試這樣做:

$users = User::find() 
    ->innerJoinWith('group_user) 
    ->where(['{{group_user}}.group_id' => $group_id]) 

但收到此錯誤:

User has no relation named "group_user" 

但我設置的用戶模型之間的關係:

public function getGroupUser() { 
    return $this->hasOne(GroupUser::className(), ['user_id' => 'id']); 
} 

我缺少什麼?這用於Humhub API

回答

3

我會改編你getGroupUser使用viaTable(其重命名爲getGroups)的關係:

public function getGroups() { 
    return $this->hasMany(Group::className(), ['user_group.id_group' => 'group.id']) 
     ->viaTable('user_group', ['user.id' => 'user_group.id_user']); 
} 

這將使你的組(S)用戶所屬。但我認爲你的目標是要獲得屬於特定組的用戶,所以同樣地,我會在你的Group模型創建關係:

public function getUsers() { 
     return $this->hasMany(User::className(), ['id' => 'user_id']) 
     ->viaTable('group_user', ['group_id' => 'id']); 

}

然後:

$group = Group::findOne($id_group); 
$users = $group->getUsers()->all(); 
+0

'在這個函數中獲取未知屬性:\\ api \\ models \\ Group :: group_user.group_id':public function getUsers(){$ {this-> hasMany(User :: className(),['group_user。 user_id'=>'user.id']) - > viaTable('group_user',['grou p.id'=>'group_user.group_id']); }' – lilbiscuit

+0

我有一個錯字,'='而不是'=>'。我也更新了表名和列名 – gmc

+0

沒問題...我發現了拼寫錯誤,包括表格和字段名稱;) – lilbiscuit