php - Laravel 雄辩的两个关系之间的关系
问题描述
我希望你能理解我的标题,呵呵。这就是我想要实现的目标。
我有与Roles和Permissions有关系的User模型。这是代码:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
}
那工作很好,但我想要另一个这样的功能
....
public function permissions_by_roles() {
}
....
因为每个用户都有单独的权限和从角色继承的权限。我想根据用户的角色获取用户权限列表。我怎样才能做到这一点?这是我的桌子:
用户 角色 权限 role_user - 包含每个用户的所有角色(例如管理员、超级管理员、用户) permission_user - 包含每个用户的所有权限(例如编辑、删除) permission_role - 包含每个角色的所有权限。
我希望任何人都可以帮助我。先感谢您!:)
解决方案
您可以hasManyThrough
在必要时将关系与合并结合使用:
class User extends Model {
....
public function roles() {
return $this->belongsToMany('App\Models\Roles');
}
public function permissions() {
return $this->belongsToMany('App\Models\Permissions');
}
public function inheritedPermissions() {
return $this->hasManyThrough('App\Models\Permissions', 'App\Models\Roles');
}
}
然后,如果您想要所有用户权限,您可以执行以下操作:
$user = User::with(["permissions", "inheritedPermissions"])->where("id", $id)->first();
所有权限将是:
$allPermissions = $user->permissions->merge($user->inheritedPermissions)->unique("id");
推荐阅读
- aws-sdk-js - 无法在成本浏览器过滤器中指定“非”运算符
- javascript - 如何使 2 个复选框充当一组复选框中的单选按钮
- python-3.x - 如何将 pytractor 与硒一起使用?
- design-patterns - 我应该如何设计这个自动改变状态的程序?
- css - Gatsby 构建 webpack 因手写笔而失败
- powershell - 如何使用powershell写入没有换行符的csv文件?
- reactjs - 在材质ui reactJS中使用useAutoComplete时如何使用popperComponent Props
- html - 按条件角度改变伪元素样式
- python-3.x - 无法使用 fbchat 登录 Facebook
- node.js - 使用 Nodejs Lambda 从 S3 上的 .xlsx 文件中读取数据