2

我提前道歉......我是cakephp的完整菜鸟。因此,我很难让我的模型正确关联。更具体地说,我在“hasMany Through”关系中遇到了最大的麻烦。我一直在用头撞墙,翻阅食谱,但没有发现它像我希望的那样清晰。

我目前正在编写一个具有许多复杂关系的网络应用程序。我将从精简版的表格开始。

  • 用户:
    • 身份证,姓名
  • 团体:
    • id,名称,department_id
  • 部门:
    • id, name, district_id
  • 地区:
    • 身份证,姓名
  • 角色
    • 身份证,姓名
    • 请注意,角色就是我所说的访问级别(用户、管理员、超级用户)。
  • groups_users -group_id, user_id
  • 部门_用户:
    • 部门 ID、用户 ID、角色 ID

关系:

  1. 用户 hasAndBelongsToMany 部门
  2. 部门 hasAndBelongsToMany User
  3. 用户 hasAndBelongsToMany 组
  4. 组 hasAndBelongsToMany 用户
  5. 部门有很多组
  6. 组属于部门
  7. 区有多个部门
  8. 部门所属区

现在,这就是我更加困惑的地方。 由于用户可以在多个部门、多个地区,并且在每个部门中具有不同的角色(例如,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 数据表中。

我不确定这是否完全正确。写出来后,我现在比以前更困惑。哈哈。我对如何正确设置这些关系感到非常困惑。而且,一旦我这样做了,我觉得我将无法从相关模型中访问数据。我收到大量错误,无法检索很多相关的模型数据。哎呀。就像我说的,我不是最强的蛋糕人。

有什么建议,在我得动脉瘤之前?!哈哈。感谢负载。任何帮助都会有很大帮助!

4

1 回答 1

4

如果用户可以在不同的组中具有不同的角色,则需要介于两者之间,HABTM 或 hasManyThrough 表。

在 Cake 2.1 版之前,不可能有与额外列的 HABTM 关系(在 role_id 下方)。保存时该列会丢失。如果您将唯一参数设置为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

关系图

于 2013-03-19T08:42:31.787 回答