CakePHP找到2个HABTM关系

时间:2012-08-29 03:12:06

标签: cakephp has-and-belongs-to-many

我正在开发在CakePHP 2框架上运行的项目。在这个应用程序中,我有:

模型:

Wallnote, User, Group

关系:

Group HABTM User
Wallnote HABTM User
Wallnote HABTM Group

表:

wallnotes

 - id
 - user_id (owner id)
 - ...

users_wallnotes

 - user_id
 - wallnote_id

groups_wallnotes

 - group_id
 - wallnote_id

groups_users

 - group_id
 - user_id

我正在使用关系“Wallnote HABTM User”和“Wallnote HABTM Group”作为过滤器,即user_id / group_id(6)wallnote_id(10)意味着,id为10的墙注对于id为6的用户是可见的,分别为id为6的组中的所有用户。

我想找到符合这些条件的所有壁纸:

  1. 已记录的用户是此壁注的所有者或
  2. wallnote与已登录用户共享 - >记录在表users_wallnotes或
  3. wallnote与某个组共享,并且已登录的用户是该组的成员
  4. 可以使用find()函数吗?

    感谢您的回答。

1 个答案:

答案 0 :(得分:1)

您有两个角色:组和用户。 用户和组分别处理它是非常困难的... 我认为标准方式是每个用户和组都有独特的角色,为了处理这个问题,你必须有这个表:

wallnotes
 - id
 - user_id (owner id)
 - ...

roles
 - id
 - user_id
 - group_id
(each rows in this table have group_id or user_id , no both of them)

roles_wallnotes
 - id
 - role_id
 - wallnote_id

创建用户(或组)时,必须为其创建角色。所以所有群组和用户现在都拥有唯一的ID。

例如,您有2个组(1,2个ID)和4个用户(1,2,3,4个ID),然后:

users :
|id|name |
---|------
1  | user1
2  | user2
3  | user3
4  | user4

groups :

|id|name |
---|------
1  | group1
2  | group2

roles :
|id| user_id | group_id |
---|---------|----------|
1  |   1     |  null    | 
2  |   2     |  null    |
3  |   3     |  null    |
4  |   4     |  null    |
5  |  null   |   1      |
6  |  null   |   2      |

现在你必须有这种关系:

Role hasOne Group
Role hasOne User
Wallnote HABTM Role

使用此解决方案,您可以轻松使用查找功能来检索您需要的数据......