0

Facebookに似たメッセージ機能を作ろうとしています。Facebookではなく、メッセージだけです。簡単な説明はこのようにします。

1) 多数のユーザーが存在します ( user テーブル) 2) 1 人のユーザーが 1 人または複数の人にメッセージを送信できます。3) 同じメッセージに複数の返信がある場合があります。4) 複数人に送る場合。全員が返信でき、全員に表示されます。

使用したテーブル

メッセージ テーブル

id
timestamp
sender_id
subject
message
due_date
urgent_flag
open_flag
reply_id

message_user (テーブル)

id
timestamp
message_id
receiver_id
read_flag

CakePHP の関係は次のとおりです。

メッセージ モデル

var $hasMany = array(
        'MessageUser' => array(
            'className'     => 'MessageUser',
            'foreignKey'    => 'message_id',    
                )
    );  
var $belongsTo = array (
    'User' => array (
        'className' =>  'User',
        'foreignKey' => 'sender_id',
    )
);
var $hasAndBelongsTo=array(
    'Message' => array (
        'className' => 'Message',
        'foreignKey' => 'reply_id',
       )
);

MessageUser モデル

var $belongsTo = array (
    'User' => array (
        'className' =>  'User',
        'foreignKey' => 'receiver_id',
    ),
    'Message' => array (
        'className' =>  'Message',
        'foreignKey' => 'message_id'

    )
);

質問:

1) 私のアプローチは正しいですか? または、データベース スキーマを修正する必要があります。2) はいの場合、受信トレイのデータを取得するにはどうすればよいですか? 人々が私に送ったメッセージの会話を表示したいので、これは少し複雑です。

たとえば、ユーザー 1 がユーザー 2 にメッセージを送信します。ユーザー 2 は同じメッセージに 2 つの返信を追加します。次に、ユーザー 1 の受信トレイには 1 つのメッセージのみが表示されます。そして開くと。以前のメッセージも表示されます.. (これは Facebook に似ています)

ここで見られるもう 1 つの問題は、メッセージを削除する方法です。ユーザー 1 が、自分の受信トレイに何も表示しないはずのメッセージを削除したとします。しかし、ユーザー 2 は、彼が行った会話全体を見ることができます。

4

1 に答える 1

0

良いアプローチのようです

あなたの最後の問題について。tinyint / datetime 列を message_user に追加します。「削除」(または同様のもの)。

次に、ユーザーモデルで次のようにします。

var $hasAndBelongsTo=array(
    'Message' => array (
        'joinTable' => 'message_user',
        'className' => 'Message',
        'foreignKey' => 'reciever_id',
        'associationForeignKey' => 'message_id'
        'conditions' => 'MessageUser.delete = 0'
       )
);

これを変更する必要がありますが、それは始まりです...

于 2010-02-19T07:38:59.240 に答える