我提前道歉......我是cakephp的完整菜鸟。因此,我很难让我的模型正确关联。更具体地说,我在“hasMany Through”关系中遇到了最大的麻烦。我一直在用头撞墙,翻阅食谱,但没有发现它像我希望的那样清晰。
我目前正在编写一个具有许多复杂关系的网络应用程序。我将从精简版的表格开始。
- 用户:
- 身份证,姓名
- 团体:
- id,名称,department_id
- 部门:
- id, name, district_id
- 地区:
- 身份证,姓名
- 角色
- 身份证,姓名
- 请注意,角色就是我所说的访问级别(用户、管理员、超级用户)。
- groups_users -group_id, user_id
- 部门_用户:
- 部门 ID、用户 ID、角色 ID
关系:
- 用户 hasAndBelongsToMany 部门
- 部门 hasAndBelongsToMany User
- 用户 hasAndBelongsToMany 组
- 组 hasAndBelongsToMany 用户
- 部门有很多组
- 组属于部门
- 区有多个部门
- 部门所属区
现在,这就是我更加困惑的地方。 由于用户可以在多个部门、多个地区,并且在每个部门中具有不同的角色(例如,DISTRICT A 的 DEPT A 中的部门管理员,以及 DISTRICT B 中的 DEPT B 中的地区管理员),我选择放置用户的级别Departments_users 表中的访问权限。由于我为命名模型存储的不仅仅是外键,即role_id,这似乎是hasMany through 关系的候选者,但cake 的文档也提到了模型关系的keepExisting 选项。
所以我尝试了这个,使用蛋糕网站上的例子。保留所有初始数据表和关系,我添加了一个 DepartmentPosition 模型和控制器,如下所示:
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 数据表中。
我不确定这是否完全正确。写出来后,我现在比以前更困惑。哈哈。我对如何正确设置这些关系感到非常困惑。而且,一旦我这样做了,我觉得我将无法从相关模型中访问数据。我收到大量错误,无法检索很多相关的模型数据。哎呀。就像我说的,我不是最强的蛋糕人。
有什么建议,在我得动脉瘤之前?!哈哈。感谢负载。任何帮助都会有很大帮助!