Cakephp 蛋糕php模型关系困难,特别是有许多困难

Cakephp 蛋糕php模型关系困难,特别是有许多困难,cakephp,relationship,foreign-key-relationship,has-many-through,jointable,Cakephp,Relationship,Foreign Key Relationship,Has Many Through,Jointable,我提前道歉。。。我是个十足的傻瓜。因此,我很难正确地关联我的模型。更具体地说,我在“hasMany-Through”关系中遇到的麻烦最多。我一直把头撞在墙上,翻阅着食谱,但没有发现它像我希望的那样清晰 我目前正在编写一个有很多复杂关系的web应用程序。我将从我的表的精简版本开始 用户: 身份证,姓名 小组: 身份证,姓名,部门号 部门: 身份证、姓名、区号 地区: 身份证,姓名 角色 身份证,姓名 请注意,角色是我所谓的访问级别(用户、管理员、超级用户) 用户组 -组id、

我提前道歉。。。我是个十足的傻瓜。因此,我很难正确地关联我的模型。更具体地说,我在“hasMany-Through”关系中遇到的麻烦最多。我一直把头撞在墙上,翻阅着食谱,但没有发现它像我希望的那样清晰

我目前正在编写一个有很多复杂关系的web应用程序。我将从我的表的精简版本开始

  • 用户:
    • 身份证,姓名
  • 小组:
    • 身份证,姓名,部门号
  • 部门:
    • 身份证、姓名、区号
  • 地区:
    • 身份证,姓名
  • 角色
    • 身份证,姓名
    • 请注意,角色是我所谓的访问级别(用户、管理员、超级用户)
  • 用户组 -组id、用户id
  • 部门和用户:
    • 部门id、用户id、角色id
关系:

  • 用户拥有一个私人部门
  • 部门拥有多个用户
  • 用户hasAndBelongsToMany组
  • 组hasandbongstomany用户
  • 部门有许多小组
  • 部门分组
  • 地区有许多部门
  • 属于昂斯托区的部门
  • 现在,我有点困惑了。 由于用户可以位于多个部门、多个地区,并且在每个部门中具有不同的角色(例如A区A部门的部门管理员和B区B部门的部门管理员),因此我选择将用户的访问级别放在departments\u 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、部门id、用户id、角色id
    好的,我从cake文档中得到的信息可能是错误的,当我向部门添加一个用户时,我可以包含一个角色id,如果我保存全部()的话,这些都将保存在部门职位数据表中

    我不确定这样做是否正确。写了这些,我现在比以前更困惑了。哈哈。我很困惑如何正确地建立这些关系。而且,尽管如此,一旦我这样做了,我觉得从关联模型访问数据会有困难。我收到了大量错误,无法检索到太多相关的模型数据。嗯。就像我说的,我不是最喜欢吃蛋糕的人

    在我得了动脉瘤之前有什么建议吗?!英雄联盟
    谢谢。任何帮助都是很大的帮助

    如果一个用户可以在不同的组中扮演不同的角色,那么在这两者之间需要一些东西,HABTM或HASMANYTHROW表格

    在Cake版本2.1之前,HABTM不可能与额外的柱有关系(在下面的角色id中)。如果您将unique参数设置为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
    

    如果一个用户可以在不同的组中扮演不同的角色,那么在这两个组之间需要一些东西,HABTM或hasManyThrough表

    在Cake版本2.1之前,HABTM不可能与额外的柱有关系(在下面的角色id中)。如果您将unique参数设置为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
    

    非常感谢。不过我还是很难接受这个。看,我写的申请部分是为了通知。此应用程序上下文中的组仅为组织级别。一个组没有任何功能(也就是角色,对吧?)。比如说,一个叫做付费(ooposed to Vol)的团体可能由一名消防员、一名中尉和一名看门人组成;因此,我看不到b/w组和函数之间的关系。如果你不介意的话,你能详细阐述一下你对这些模型的概念吗?还有,你用什么来生成图形?你说得对,角色=功能,角色绝对是一个更好的名字,我认为我的模型不完整,我会编辑它。这个图是用MySQL工作台制作的,很酷的工具:-)谢谢。这将非常有帮助。顺便说一句,现在看看MYSQL工作台!非常感谢!!!我希望这对其他人也有帮助!多亏了你的第一个答案,我终于弄明白了。我最终做了一些非常相似的事情。你完全正确,我们解决方案的唯一区别是,在我的解决方案中,“组角色”是“部门角色(hasManyThrough)”,这只是因为我的应用程序的权限是在部门级别确定的,而不是在组级别确定的。非常感谢您非常详细、易懂的回答。谢谢你给我看工作台。。。太棒了,非常感谢。不过我还是很难接受这个。看,我写的申请部分是为了通知。此应用程序上下文中的组仅为组织级别。一个组没有任何功能(也就是角色,对吧?)。比如说,一个叫做付费(ooposed to Vol)的团体可能由一名消防员、一名中尉和一名看门人组成;因此,我看不到b/w组和函数之间的关系。如果你不介意的话,你能详细阐述一下你对这些模型的概念吗?还有,你用什么来生成图形?你说得对,角色=功能,角色绝对是一个更好的名字,我认为我的模型不完整,我会编辑它。这张图是用迈斯制作的