mysql - Yii2、ActiveQuery、subQuery 没有带 ID 的条目

标签 mysql activerecord yii2 relationships

我找不到解决方案...我们有 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/

相关文章:

php - 我的代码中的 MYSQL 错误

php - 只选择那些在同一个表中有多个值的记录

ruby-on-rails - 在 Rails 中,数据库锁定是否会确保只有进程一次检查属性值而不会成为巨大的瓶颈?

mysql - 创建一个可以动态创建新表单/数据库表的 Rails 应用程序?

ruby-on-rails-3 - 对 NOT IN 值没有任何作用的 Rails 作用域

php - yii2如何在一个模型中使用多个表

mysql - 使用触发器检查其他数据库中的值

mysql - 在另一列有效的基础上添加两列并重复使用

php - Yii 2.0 如何在没有 <div class ="form-group"> 的情况下生成表单?

php - yii2、谷歌 oauth2 和范围