我正在尝试制作类似于facebook的消息功能。只是消息的事情,而不是Facebook。简要说明就是这样的。
1)有很多用户(用户表) 2)一个人可以向一个或多个人发送消息。 3)可以对同一消息进行多次回复。 4)如果发送给多个人。所有人都可以回复,并向所有人展示。
使用的表格
消息表
id
timestamp
sender_id
subject
message
due_date
urgent_flag
open_flag
reply_id
message_user(table)
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 Model
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删除了一条消息,它不应该在他的收件箱中显示任何内容。但是用户2可以看到他所拥有的整个对话。
答案 0 :(得分: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'
)
);
你需要修改它,但这是一个开始......