我正在开发在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的组中的所有用户。
我想找到符合这些条件的所有壁纸:
可以使用find()函数吗?
感谢您的回答。
答案 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
使用此解决方案,您可以轻松使用查找功能来检索您需要的数据......