Yii2查询组中的用户

时间:2017-04-05 14:59:06

标签: mysql yii2 yii2-model

我的数据库有一个user表和一个group表,组表有一个user_id列,这使得它只是返回一个组中的用户列表:

$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

1 个答案:

答案 0 :(得分:3)

我会使用getGroupUser重新编程您的getGroups(将其重命名为viaTable)关系:

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

这将为您提供用户所属的组。但我认为您的目标是获取属于给定组的用户,因此我会在getUsers模型中创建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();