php - 如何在laravel中获取未添加到任何子组中的组的用户
问题描述
$users=Group::find(3)->users;
$users->whereDoesntHave('subgroups')->get();
它没有像我做错的那样工作,但我不知道如何得到结果。组和子组与用户具有多对多关系
解决方案
您可以使用whereHas
and has
or的组合doesntHave
来根据关系的存在来限制此查询:
$groupId = 3;
$users = User::whereHas('groups', function ($query) use ($groupId) {
$query->where('group_id', $groupId);
})->doesntHave('subgroups')->get();
whereHas
将从查询返回的用户限制为仅属于具有“id”3 的组的用户。doesntHave
将返回的用户限制为仅与任何子组没有任何关系的用户。结合此查询是查找属于第 3 组且不属于任何子组的用户。
Laravel 7.x Docs - Eloquent - 关系 - 查询关系存在 whereHas
Laravel 7.x Docs - Eloquent - 关系 - 查询关系缺失 doesntHave
更新:
您可以通过使用来限制doesntHave
with 条件whereDoesntHave
:
...->whereDoesntHave('subgroups', function ($query) use ($groupId) {
// depending upon the relationship setup
$query->where('group_id', $groupId);
})->get();
推荐阅读
- python - 可以在python中对包含-5到256之间的整数的变量强制使用唯一ID吗?
- javascript - 为什么状态未定义?[钩子/还原]
- wordpress - AWS Elastic Beanstalk 应用程序初始访问不安全,但后续重定向是
- javascript - 计算当前日期和日期之间的差异,并从差异值开始计算时间
- selenium - 即使安装了所有 jar,也无法运行 selenium webdriver 脚本
- java - 如果我们更改字符串值,字符串池如何管理引用?
- laravel - Laravel 中的“全球引导场所”在哪里
- php - php对来自数据库的结果进行分组,在数组之间推送
- r - 问题矩阵中的锯齿形图案
- react-native - 为什么我会收到“redux-persist/createPersistoid:错误序列化状态”?