cakephp - Cake php 模型关系的难度,尤其是。有很多通过

标签 cakephp relationship foreign-key-relationship has-many-through join

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

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

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

关系:

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

现在,我有点困惑了。 由于用户可以在多个部门、多个地区,并且在每个部门内具有不同的角色(例如,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

relation diagram

关于cakephp - Cake php 模型关系的难度,尤其是。有很多通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489604/

相关文章:

Cakephp 3.0 保存关联模型

php - EAV、架构更改、Json?

mysql - SQL 连接同时具有一对一和一对多关系的表

sql - 如何确定导致INSERT中重复输入错误的表行?

sql - 插入具有自动递增 ID 的表时保持外键关系

php - 外键,关系问题

cakephp - 在单个查询中保存多行

mysql - 如何以编程方式确定 MySQL 关系类型 (1 :1, 1 :n, n :m) between tables?

mysql - 认识laravel的关系

unit-testing - 使用枚举的 CakePHP 测试的解决方法?