我正在尝试为已经建立数据库结构的系统构建后端。
在开发过程中,我遇到了一个与工作关系的问题。
我有 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;
Roles
和Permissions
many-to-many
关系,一个角色具有多个权限,一个权限具有多个角色。你正在使用one-to-many
关系,这是错误的。$hasMany
旨在用于one-to-many
关系。对于这两种模型,您必须改用$belongsToMany
。您需要有三个表:
Permissions
(2 列:ID 和名称)Roles
(2 列:ID 和名称)Roles_Permissions
(2 列:角色 ID、权限 ID)
看看多对多的关系,并尝试修复你的方法。