laravel - Laravel Spatie 通过 Eager Loading 获取所有权限
问题描述
大家!我正在使用 Laravel Spatie 权限包。我可以像这样获得用户的所有分配权限。
$user->getAllPermissions()
但是,我想通过急切加载获得所有权限。也许像这样。
$users = User::with('getAllPermissions')->get();
但这没有用。
我试过了
$users = user::with('permissions')->get();
但查询计数与结果相同
$users = user::get();
那么$user->getAllPermissions()
已经是急切加载的查询了吗?
或者是否有任何急切加载的查询?
解决方案
获得用户列表的所有权限是一件非常棘手的事情。
$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'
]
我想这会对你有所帮助。
推荐阅读
- scala - 如何从 spark scala 中的数据框中找到短语计数?
- spring-boot - 如何将grpc与spring boot一起使用
- c# - Windows 10 UWP App:上传大文件最简单的地方?
- python - 在熊猫数据框中的日期时间列中查找时隙数
- python-3.x - 在 Python 3.x 中创建复古主题的加载屏幕
- amazon-web-services - SNS 消息是否分散到 SQS 队列以保持顺序?
- jboss - 在哪里可以找到更大尺寸的 drools 文档的铁路图
- java - 改进一个 java soap 客户端
- python - Pyserial 无法将所有字符发送到 arduino,但可以在另一个 PC 终端上发送
- c++ - c++类分配动态数组失败(内存泄漏)