有许多关系 十月CMS |拉拉维尔



我正在尝试为已经建立数据库结构的系统构建后端。
在开发过程中,我遇到了一个与工作关系的问题。

我有 2 个数据库表:

  • 权限
  • 角色

问题是在角色数据库中,结构看起来像这样

RoleID  |   PermissionID
1   |       1
1   |       2
1   |       3
2   |       3
3   |       5

如您所见,角色 1 实际上有 3 个条目,它们也链接到 3 个权限。

对于权限表,只有 2 列:id 和名称

到目前为止,我已经设法让它工作,但是,由于一个角色有很多条目(至少我认为是这样),我每个角色只获得 1 个权限。

问题是:如何使用关系获取一个角色的所有权限。

权限模型的当前代码.php

public $belongsToMany = [
'roles'  =>  [
'VendorDatabaseModelsRoleModel',
'table' =>  'roles',
'key => 'permissionID',
'otherKey' => 'id'
]
];

RoleModel的当前代码.php

public $hasMany = [
'permissions'    =>  [
'VendorDatabaseModelsPermissionModel',
'table'     =>  'permissions',
'key'       =>  'id',
'otherKey'  =>  'permissionID'
]
];

当我查询角色模型时,我只为每个角色条目获得 1 个权限,因此,如果每个角色有 20 个权限,我将获得 20 个数组,而不是 1 个具有 20 个值的数组。

任何帮助真的非常感谢!谢谢。

在这种情况下可以完成工作的SQL查询应该看起来像这样(经过测试并且工作正常)

SELECT 
roles.id as roleID,  
(SELECT name FROM permissions WHERE permissions.id = 1) as roleName,  
permissions.id as permissionID,  
permissions.name as permissionName 
FROM 
permissions
LEFT JOIN
roles ON roles.permissionId = permissions.id
WHERE 
roles.id = 1;

RolesPermissionsmany-to-many关系,一个角色具有多个权限,一个权限具有多个角色。你正在使用one-to-many关系,这是错误的。$hasMany旨在用于one-to-many关系。对于这两种模型,您必须改用$belongsToMany。您需要有三个表:

  1. Permissions(2 列:ID 和名称)
  2. Roles(2 列:ID 和名称)
  3. Roles_Permissions(2 列:角色 ID、权限 ID)

看看多对多的关系,并尝试修复你的方法。

相关内容

  • 没有找到相关文章

最新更新