Yii2 查询群组中的用户
Yii2 query for users in group
我有一个数据库,它有一个 user
table 和一个 group
table 组 table 有一个列 user_id
这使得 return 组中的用户列表变得简单:
$users = User::find()
->where(['{{user}}.group_id' => $group_id])
->all();
现在 user_id 列消失了,并且有第三个 table group_user
与 user_id
和 group_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();
我有一个数据库,它有一个 user
table 和一个 group
table 组 table 有一个列 user_id
这使得 return 组中的用户列表变得简单:
$users = User::find()
->where(['{{user}}.group_id' => $group_id])
->all();
现在 user_id 列消失了,并且有第三个 table group_user
与 user_id
和 group_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();