gpt4 book ai didi

laravel - 有很多关系拉维

转载 作者:行者123 更新时间:2023-12-04 03:11:54 25 4
gpt4 key购买 nike

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

我有 2 个数据库表:

  • 权限
  • 角色

问题是在角色数据库中,结构如下所示

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

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

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

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

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

PermissionModel.php 的当前代码

public $belongsToMany = [
'roles' => [
'Vendor\Database\Models\RoleModel',
'table' => 'roles',
'key => 'permissionID',
'otherKey' => 'id'
]
];

RoleModel.php 的当前代码

public $hasMany = [
'permissions' => [
'Vendor\Database\Models\PermissionModel',
'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;

最佳答案

RolesPermissions多对多关系,一个角色有多个权限,一个权限有多个角色。您使用的是错误的一对多 关系。 $hasMany 用于一对多 关系。对于这两种模型,您都必须使用 $belongsToMany。您需要三个表:

  1. 权限(2 列:id 和 name)
  2. 角色(2 列:id 和 name)
  3. Roles_Permissions(2 列:RoleID、PermissionID)

看看many to many relationships并尝试修正您的方法。

关于laravel - 有很多关系拉维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com