Yii2、ActiveQuery、subQuery 没有带 ID 的条目
Yii2, ActiveQuery, subQuery have not entry with ID
我找不到解决方案...我们有 mysql 个表
`users`
id | username
1 Mike
2 John
3 Jane
`roles`
userID | roleID
1 2
1 3
3 1
所以问题是 - 我需要 select 在一个查询中没有特定 roleID 的所有用户。用户也可以在角色中没有任何关系(例如 John 没有任何角色 ID,因此他应该在所有查询中被 selected)。
简单的查询是当用户有一些 roleID(我们可以用 ->joinWith() 来检查它) - 但我需要反转这个查询,select 所有除了一个 roleID 之外的用户。
问题是我们有 oneToMany (users->roles) 关系并且 Yii2 ->joinWith() 没有以正确的方式工作(我想,我希望我错了)。
有人可以帮忙处理吗?
如果 User 模型有 'roles' 关系并且 $excludedRoleId 是排除的 roleId,则此 returns 没有角色的用户或角色不是 $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();
如果想select所有没有任何角色的用户,那么简单SQL查询上面的问题就是
SELECT username
FROM users
WHERE id NOT IN (SELECT userID FROM roles)
结果将 return “john” 因为他没有任何角色
在 Yii2 中,您可以编写生成上述查询的代码
$subQuery=Roles::find()->select('userID ');
$query = Users::find()->
select("username")->where(['not in', 'id', $subQuery]);
$models=$query->all();
我找不到解决方案...我们有 mysql 个表
`users`
id | username
1 Mike
2 John
3 Jane
`roles`
userID | roleID
1 2
1 3
3 1
所以问题是 - 我需要 select 在一个查询中没有特定 roleID 的所有用户。用户也可以在角色中没有任何关系(例如 John 没有任何角色 ID,因此他应该在所有查询中被 selected)。
简单的查询是当用户有一些 roleID(我们可以用 ->joinWith() 来检查它) - 但我需要反转这个查询,select 所有除了一个 roleID 之外的用户。
问题是我们有 oneToMany (users->roles) 关系并且 Yii2 ->joinWith() 没有以正确的方式工作(我想,我希望我错了)。
有人可以帮忙处理吗?
如果 User 模型有 'roles' 关系并且 $excludedRoleId 是排除的 roleId,则此 returns 没有角色的用户或角色不是 $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();
如果想select所有没有任何角色的用户,那么简单SQL查询上面的问题就是
SELECT username
FROM users
WHERE id NOT IN (SELECT userID FROM roles)
结果将 return “john” 因为他没有任何角色
在 Yii2 中,您可以编写生成上述查询的代码
$subQuery=Roles::find()->select('userID ');
$query = Users::find()->
select("username")->where(['not in', 'id', $subQuery]);
$models=$query->all();