Laravel Spatie 通过预加载获得所有权限
Laravel Spatie Get All Permissions with 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'
]
我想这会对你有所帮助。
大家好! 我正在使用 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'
]
我想这会对你有所帮助。