我找不到解决方案...我们有 mysql 表
`users`
id | username
1 Mike
2 John
3 Jane
`roles`
userID | roleID
1 2
1 3
3 1
所以问题是 - 我需要在一个查询中选择所有没有特定 roleID 的用户。此外,用户在角色中可以没有任何关系(例如 John 没有任何 roleID,因此应在所有查询中选择他)。
简单的查询是当用户拥有某个角色 ID 时(我们可以使用 ->joinWith() 检查它) - 但我需要反转此查询,选择具有除一个角色 ID 之外的任何其他角色的所有用户。
问题是我们有 oneToMany (用户->角色)关系,而 Yii2 ->joinWith() 没有以正确的方式工作(正如我所想,我希望我是错的)。
有人可以帮忙解决吗?
最佳答案
如果用户模型具有“角色”关系,并且 $excludedRoleId 是排除的 roleId,则返回没有角色的用户或角色不是 $excludedRoleId 的用户
User::find()
->joinWith(['roles'])
->where('roles.userID IS NULL OR roles.userID NOT IN ( SELECT userID FROM roles WHERE roleID = :roleId)', [':roleId' => $excludedRoleId])
->all();
关于mysql - Yii2、ActiveQuery、subQuery 没有带 ID 的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39500823/