蛋糕php模型关系难度,尤其是hasMany通过

时间:2013-03-19 00:44:07

标签: cakephp relationship foreign-key-relationship has-many-through jointable

我提前道歉......我是蛋糕派的完全菜鸟。因此,我很难让我的模型正确相关。更具体地说,我对“hasMany Through”关系最麻烦。我一直在靠墙撞击,并搜索食谱,但没有像我希望的那样清楚地发现它。

我目前正在撰写一个包含许多复杂关系的网络应用。我将从我的表格的精简版本开始。

  • 用户:
    • id,name
  • 组:
    • id,name,department_id
  • 部门:
    • id,name,district_id
  • 区:
    • id,name
  • 角色
    • id,name
    • 请注意,角色就是我所说的访问级别(用户,管理员,超级用户)。
  • groups_users -group_id,user_id
  • departments_users:
    • department_id,user_id,role_id

关系:

  1. User hasAndBelongsToMany Department
  2. 部门拥有和贝隆到多个用户
  3. User hasAndBelongsToMany Group
  4. Group hasAndBelongsToMany User
  5. Department hasMany Group
  6. 集团所属部门
  7. 区有许多部门
  8. 部门所属的区域
  9. 现在,我有点困惑。 由于用户可以在多个部门,多个区域,以及在每个部门中具有不同的角色(例如,区域A的DEPT A中的部门管理员和区域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');
    

    我还添加了一个新的数据表:

    • department_position:
      • id,department_id,user_id,role_id

    好的,所以我得到的,可能是错误的来自蛋糕文档,是当我将用户添加到部门时,我可以包含一个role_id,并且如果我保存所有这些都将保存在department_position数据表中()。

    我不确定这是否正确。我现在感到更加困惑,因为写完这篇文章比以前更加困惑。大声笑。我对如何正确设置这些关系感到困惑。而且,一旦我这样做,我觉得我将无法访问相关模型的数据。我收到的错误很多,我无法检索到很多相关的模型数据。伊克。就像我说的,我不是最强的蛋糕人。

    在我有动脉瘤之前有什么建议吗?!大声笑。 谢谢负载。任何帮助都会有很多帮助!

1 个答案:

答案 0 :(得分:4)

如果用户可以在不同的组中具有不同的角色,则需要在HABTM或hasManyThrough表之间使用某些内容。

在Cake 2.1版之前,不可能将HABTM关系与额外的列相关联(此处为role_id)。 The column would get lost when saving。如果您将唯一参数设置为keepExisting,则情况不再如此,但我更喜欢与HABTM相关的hasManyThrough关系。我想这是一个品味问题。

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

relation diagram