1

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 ユーザー」と「Wallnote HABTM グループ」の関係をフィルターとして使用しています。 ID 6 のグループ内のユーザー。

これらの条件に一致するすべてのウォールノートを見つけたい:

  1. ログインしたユーザーがこのウォールノートの所有者である、または
  2. ウォールノートがログに記録されたユーザーと共有されました -> テーブル users_wallnotes のレコードまたは
  3. wallnote はいくつかのグループと共有され、ログインしているユーザーはこのグループのメンバーです

find() 関数を使用してこれを行うことは可能ですか?

ご回答ありがとうございます。

4

1 に答える 1

1

グループとユーザーの 2 つの役割があります。ユーザーとグループを別々に処理するのは非常に困難です...標準的な方法は、ユーザーとグループごとに一意の役割を持つことだと思います。これを処理するには、次のテーブルが必要です。

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

このソリューションを使用すると、検索機能を使用して必要なデータを簡単に取得できます...

于 2012-08-29T07:22:18.920 に答える