我的数据库有一个user
表和一个group
表,组表有一个user_id
列,这使得它只是返回一个组中的用户列表:
$users = User::find()
->where(['{{user}}.group_id' => $group_id])
->all();
现在,user_id列已消失,并且第三个表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"
但我在用户模型中设置关系:
public function getGroupUser() {
return $this->hasOne(GroupUser::className(), ['user_id' => 'id']);
}
我错过了什么?这用于Humhub API。
答案 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();