如何在 Laravel 6/7 中访问多个多对多关系
How to access multiple many to many relationships in Laravel 6/7
大家好,
我有 3 个模型,即用户、角色和权限。
用户与角色具有多对多关系
Role 与 Permission
是多对多的关系
我有 5 个表,用户,角色,role_user,权限,permission_role
我的问题是:在用户模型中有没有办法访问分配给用户角色的所有权限?
感谢大家。
代码:
用户模型
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function permissions()
{
//how can i get all permissions of the user
}
}
榜样
class Role extends Authenticatable
{
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission:class);
}
}
权限模型
class Permission extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
试试这个:
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function permissions()
{
$permissionList = [];
foreach($this->roles as $role){
foreach($role->permissions as $permission){
if(!in_array($permission->name, $permissionList){
$permissionList[] = $permission->name
}
}
}
return $permissionList;
}
}
我认为你必须先迭代你的角色才能获得权限,你也可以使用附加属性来获得你的用户权限作为它的属性,阅读更多here。
哦,我记得你也可以使用 nested eager loading 这样你就可以像这样在角色中调用你的权限 $user->with('roles.permissions')->get()
但当然你必须首先从角色关系中迭代它以获得权限数据。
大家好,
我有 3 个模型,即用户、角色和权限。
用户与角色具有多对多关系
Role 与 Permission
我有 5 个表,用户,角色,role_user,权限,permission_role
我的问题是:在用户模型中有没有办法访问分配给用户角色的所有权限?
感谢大家。
代码:
用户模型
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function permissions()
{
//how can i get all permissions of the user
}
}
榜样
class Role extends Authenticatable
{
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission:class);
}
}
权限模型
class Permission extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
试试这个:
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function permissions()
{
$permissionList = [];
foreach($this->roles as $role){
foreach($role->permissions as $permission){
if(!in_array($permission->name, $permissionList){
$permissionList[] = $permission->name
}
}
}
return $permissionList;
}
}
我认为你必须先迭代你的角色才能获得权限,你也可以使用附加属性来获得你的用户权限作为它的属性,阅读更多here。
哦,我记得你也可以使用 nested eager loading 这样你就可以像这样在角色中调用你的权限 $user->with('roles.permissions')->get()
但当然你必须首先从角色关系中迭代它以获得权限数据。