【问题标题】:Laravel Spatie Get All Permissions with Eager LoadingLaravel Spatie 通过 Eager Loading 获取所有权限
【发布时间】:2020-07-10 13:19:00
【问题描述】:

大家! 我正在使用 Laravel Spatie 权限包。 我可以像这样获得用户的所有分配权限。

$user->getAllPermissions()

但是,我想通过急切加载获得所有权限。 也许是这样的。

$users = User::with('getAllPermissions')->get();

但这没有用。

我试过了

$users = user::with('permissions')->get();

但查询计数与

的结果相同
$users = user::get();

那么$user->getAllPermissions() 已经是预先加载的查询了吗?

或者是否有任何预先加载的查询?

【问题讨论】:

    标签: laravel laravel-5 permissions laravel-permission


    【解决方案1】:

    获得用户列表的所有权限是一件非常棘手的事情。

    $users = user::with('permissions')->get();
    

    这将提供带有用户列表的权限模型。这样,您将仅获得分配给用户的权限。但用户有角色,则不会添加角色权限。

    但是$user->getAllPermissions(); 函数会给你所有与用户角色和权限相关的权限。但我们需要用户列表的所有权限。

    我创建了一个 Mutators 函数来获取用户列表的权限。

    public function getPermissionAttribute()
    {
        return $this->getAllPermissions();
    }
    

    现在您可以在模型中附加

    protected $appends = [
        'permission'
    ]
    

    现在为了避免递归查询(又名 n+1 查询问题,避免为每个用户执行一个查询),像这样编写您的用户查询

    $users = user::with(['permissions', 'roles'])->get();
    

    或者添加你的​​用户模型

    protected $with =[
       'permissions',
        'roles'
    ]
    

    我想这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2021-05-01
      • 2014-08-14
      • 2021-10-17
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多