首页 > 解决方案 > 如何在laravel中获取未添加到任何子组中的组的用户

问题描述

$users=Group::find(3)->users;
    $users->whereDoesntHave('subgroups')->get();

它没有像我做错的那样工作,但我不知道如何得到结果。组和子组与用户具有多对多关系

标签: phplaraveleloquent

解决方案


您可以使用whereHasand hasor的组合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

更新:

您可以通过使用来限制doesntHavewith 条件whereDoesntHave

...->whereDoesntHave('subgroups', function ($query) use ($groupId) {
    // depending upon the relationship setup
    $query->where('group_id', $groupId);
})->get();

推荐阅读