php - 如何在 Laravel 中使用嵌套的多对多关系从数据库中获取数据
问题描述
我正在研究 LaravelAccess Control Level (ACL)
系统。表在哪里包含一些many to many
关系。User
tablebelongsToMany
与Role
TableRole
具有多对多关系,反之,与table 具有多对多关系。再次,tablebelongsToMany
与table 具有多对多关系,并且与table具有多对多关系。User
Role
belongsToMany
Permission
Permission
belongsToMany
Role
我想从用户表中运行一个查询来获取角色的所有权限。该角色通过角色表分配给当前用户。
这是我的代码示例。
用户模型
public function roles()
{
return $this->belongstoMany(Role::class);
}
好榜样
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
权限表
public function roles()
{
return $this->belongsToMany(Role::class);
}
我已经使用 egar 加载尝试过这个查询......
public function hasPermission($permission)
{
if($this->roles()->with('permissions')->get()->pluck('permissions'))
{
return true;
}
return false;
}
但它总是return false
。
解决方案
有很多方法可以检查其中一个角色是否已授予权限。
一个例子,给模型添加hasPermission
方法User.php
public function hasPermission($permission = '') {
if ( empty($permisison) ) {
return false;
}
/*
Find all user roles that have given permission
*/
$rolesWithPermission = $this
->roles()
->whereHas('permissions', function($query) use ($permission) {
$query->where('name', $permission);
})
->get();
/*
If there is at least one role with given permission,
user has permission
*/
return $rolesWithPermission->count() > 0;
}
users
或者您可以使用,roles
和之间的多个连接进行一次查询,permissions
然后使用where('permissions.name', '=', $permission)
推荐阅读
- neo4j - 在 neo4j 中将多条路径合二为一
- javascript - 如何更改自定义 div 中/表外的数据表导出按钮的位置
- r - 根据R中的条件重命名字符
- java - 如何从空手道将数字传递给 Java?如何调用带有数字的 Java 构造函数?
- oracle - 有没有办法通过 Oracle Cloud android 应用程序关闭实例?
- flutter - Flutter,firestore直接查询和FutureBuilder中的查询之间的区别?
- java - 在解析 json 字符串时不断收到无法识别的字段未标记为可忽略的错误
- python - 为什么它说名称未定义?
- docker - 环境变量未注入 Azure Devops 管道上的多阶段 docker build
- javascript - 如何在 Ant Design 中更改所选菜单项的颜色?