gpt4 book ai didi

mysql - 以多对多关系获取除管理员以外的所有用户

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:37 24 4
gpt4 key购买 nike

我有一个用户表和角色表,在角色用户表中以多对多关系连接它们。我想获得除具有管理员角色的用户以外的所有用户,我想包括没有任何角色的用户。基本上除了管理员之外的所有用户。 enter image description here

最佳答案

期望正确设置关系,这可以通过 whereDoesntHave() 轻松实现:

$roleToExclude = 1;
$users = User::query()
->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
$query->where('id', $roleToExclude);
})
->get();

关于评论:如果你想检索所有至少拥有一个角色的用户,但他们的角色可能不包含管理员角色,那么你可以使用这个查询:

$roleToExclude = 1;
$users = User::query()
->has('roles')
->whereDoesntHave('roles', function (Builder $query) use ($roleToExclude) {
$query->where('id', $roleToExclude);
})
->get();

has('roles') 将确保 EXISTS 用户有一个角色,而 whereDoesntHave('roles', fn()) 将确保它不是管理员角色。


关于@Jino Antony 建议编辑的注释:

在处理多对多关系时,查询生成器的所有whereX($col, $val) 方法都对其他表 进行操作(roles 在这种情况下),而不是数据透视表(role_user)。要查询数据透视表中的列,您需要在我的示例中使用 wherePivot('role_id', $roleToExclude)

关于mysql - 以多对多关系获取除管理员以外的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56801506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com