mysql - Yii2 查询群组中的用户

标签 mysql yii2 yii2-model

我有一个 DB,它有一个 user 表和一个 group 表,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"

但是我在User模型中设置了关系:

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

我错过了什么?这用于 Humhub API .

最佳答案

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

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

这将为您提供用户所属的组。但我认为你的目标是获得属于给定组的用户,所以类似地我会在你的 Group 模型中创建一个 getUsers 关系:

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

关于mysql - Yii2 查询群组中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234854/

相关文章:

php - 如何在 yii2 搜索模型中编写 mysql 查询

mysql - 简化查询(使用左外连接)

MYSQL删除一条记录

mysql - 在 MySQL 中存储表情符号

transactions - Yii2 中带有回调的数据库事务

mysql - 从 Yii2 模型重新创建数据库表

MySQL 左/右/外连接

尽管 mysql 说它正在运行,但 MySQL 复制没有运行

javascript - PHP:如何从 yii2 中的模块访问 Web 目录中的 .js 和 .csss?

php - 为什么在 Controller init() 方法中 Yii2 用户身份为空?