Spatie Laravel权限-如何获取具有一个角色或另一个角色的用户

8qgya5xd  于 2023-03-13  发布在  其他
关注(0)|答案(3)|浏览(181)

我试图找出是否有一种简单的方法来获取所有具有一个角色或另一个角色的用户。
在官方文件的空间Laravel许可,我找不到这个。
我试着这样做,但我得到了所有的用户。

User::role(['Individual', 'Organisation', 'Venue'])->get();

我也是这样尝试的:

User::whereHas("roles", function($q) {
                $q->orWhere(function ($query) {
                    $query->where("name", "Individual")
                        ->where("name", "Venue")
                        ->where("name", "Organisation");
                });
            })->get();

在Db roles表中,我有:

sirbozc5

sirbozc51#

您可以尝试whereIn()到roles()参考链接https://laravel.com/docs/8.x/queries#additional-where-clauses

User::with("roles")->whereHas("roles", function($q) {
    $q->whereIn("name", ["Individual","Venue",'Organisation']);
})->get();

尝试id以获得更好的搜索效果,因为它是主键

User::with("roles")->whereHas("roles", function($q) {
    $q->whereIn("id", [6,7,8]);
})->get();

注意此处name应与数据库中的角色名称字符串完全匹配

stszievb

stszievb2#

@Apokryfos的意思是你把它改成这样

User::whereHas("roles", function($q) {
                $q->where("name", "Individual")
                    ->orWhere("name", "Venue")
                    ->orWhere("name", "Organisation");
            })->get();

如果您希望用户拥有所有角色而不是其中一个角色

User::whereHas("roles", function($q) {
        $q->where("name", "Individual")
    })->whereHas("roles", function($q) {
        $q->where("name", "Venue")
    })->whereHas("roles", function($q) {
        $q->where("name", "Organisation")
    })->get();
ovfsdjhp

ovfsdjhp3#

获取分配角色的所有用户
$users_with_roles =用户::拥有('角色')-〉get();
获取未分配任何角色的所有用户
$users_without_any_roles =用户::没有('角色')-〉get();

相关问题