我提前道歉...我对 cakephp 完全是菜鸟。因此,我很难正确关联我的模型。更具体地说,我在“hasMany Through”关系中遇到的麻烦最多。我一直在用头撞墙,并搜索食谱,但还没有发现它像我希望的那样清晰。
我目前正在编写一个具有许多复杂关系的网络应用程序。我将从我的表格的精简版本开始。
- 用户:
- 身份证、姓名
- 团体:
- ID、姓名、部门 ID
- 部门:
- ID、名称、district_id
- 地区:
- 身份证、姓名
- 角色
- 身份证、姓名
- 请注意,角色就是我所说的访问级别(用户、管理员、 super 用户)。
- 组用户 -group_id,user_id
- 部门_用户:
- 部门 ID、用户 ID、角色 ID
关系:
- 用户拥有并属于多个部门
- 部门 hasAndBelongsToMany User
- 用户 hasAndBelongsToMany 组
- 群组 hasAndBelongsToMany 用户
- 部门有很多组
- 组所属部门
- 区有很多部门
- 部门所属区
现在,我有点困惑了。 由于用户可以在多个部门、多个地区,并且在每个部门内具有不同的角色(例如,DISTRICT A 的 DEPT A 中的部门管理员,以及 B 区的 DEPT B 中的地区管理员),因此我选择放置用户的级别Departments_users 表中的访问权限。由于我为命名模型存储的不仅仅是外键,即 role_id,这似乎是 hasMany through 关系的候选者,但 cake 的文档还提到了模型关系的 keepExisting 选项。
所以我尝试了这个,使用蛋糕网站的例子。保留所有初始数据表和关系,我添加了一个 DepartmentPosition 模型和 Controller ,如下所示:
user.php
public $hasMany = array('DepartmentPosition');
department.php
public $hasMany = array('DepartmentPosition');
department_position.php
public $belongsTo = array('User','Department');
我还添加了一个新的数据表:
- 部门职位:
- id、department_id、user_id、role_id
好吧,所以我得到的(可能是蛋糕文档中的错误)是,当我将用户添加到部门时,我可以包含一个 role_id,并且如果我执行 saveAll ,这一切都将保存在 Department_position 数据表中()。
我不确定这是否是正确的做法。写完这篇文章后,我现在比以前感到更加困惑。哈哈。我对如何正确建立这些关系感到非常困惑。而且,一旦我这样做了,我觉得我将无法从相关模型访问数据。我遇到了大量错误,并且无法检索很多相关的模型数据。哎呀。就像我说的,我不是最强的蛋糕人。
在我患动脉瘤之前,有什么建议吗?!哈哈。 谢谢负载。任何帮助都会有很大帮助!
最佳答案
如果用户可以在不同的组中拥有不同的角色,则需要在 HABTM 或 hasManyThrough 表之间插入一些内容。
在 Cake 2.1 版本之前,不可能与额外的列建立 HABTM 关系(此处位于 role_id 下方)。 The column would get lost when saving 。如果您将唯一参数设置为 keepExisting,情况就不再是这样,但我更喜欢 hasManyThrough 关系而不是 HABTM。我想这是一个品味问题。
User hasMany GroupRole
GroupRole belongsTo User, GroupRole belongsTo Groups, GroupRole belongsTo Role (GroupRole is hasManyThrough table)
Group hasMany GroupRole, Group belongsTo Department
Department hasMany Group, Department belongsTo District
District hasMany Department
关于cakephp - Cake php 模型关系的难度,尤其是。有很多通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489604/