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

时间:2020-11-03 08:05:22

标签: laravel laravel-permission

我正在尝试找出是否有一种简单的方法来获取具有某个角色或另一个角色的所有用户。
在Spatie Laravel Permissions的官方文档中,找不到此文件。

我正在尝试这样,但是我得到了所有用户。

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角色表中,我有:

enter image description here

2 个答案:

答案 0 :(得分:0)

@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();

答案 1 :(得分:0)

您可以尝试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应该与您数据库中的角色名称的确切字符串匹配