2017-04-05 85 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