2012-08-29 158 views
1

我正在处理在CakePHP 2框架上运行的项目。在这个应用程序,我有:CakePHP找到2 HABTM关系

型号:

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用户” 和“ Wallnote HABTM Group“作为过滤器,即user_id/group_id(6)wallnote_id(10)意味着,id 10的墙纸将是vis IBLE用于用户ID为6,分别对所有用户在组ID为6.

我想找到所有wallnotes匹配这些条件:

  1. 登录的用户是这个wallnote的拥有者或
  2. wallnote用登录的用户共享 - >在表users_wallnotes记录OR
  3. wallnote用一些基团共享和登录用户是该组的成员

这是可以做到这使用find()函数?

感谢您的回答。

回答

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 IDS)和4个用户(含1,2,3,4 IDS),则:

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 

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