0

我正在尝试制作类似于 facebook 的消息功能。只是消息而不是facebook。一个简短的描述就是这样。

1)有多个用户(用户表) 2)一个人可以向一个或多个人发送消息。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',
       )
);

消息用户模型

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 可以看到他的整个对话。

4

1 回答 1

0

WRT 你的模式,我只会在你需要访问它们的方向上设置关系。因此,如果您不需要访问给定消息的用户,请不要将消息链接回用户。它可能会产生一些递归问题,您的模型会自动获取太多数据,因为您有一个循环循环(User hasMany Message、Message HasMany User 等)这实际上是 HABTM 关系,所以使用它而不是 hasMany (如果您希望它是双向关系)。

我的评论提到了树的行为。简而言之,它允许您轻松地将分层数据存储到关系数据库表中。我不会重复该手册,但请查看http://book.cakephp.org/view/91/Tree并在 Google 上搜索示例。我很确定这是您要用于线程回复的内容。

再提醒一句——如果你打算在一个严肃的用户群中使用它,请在你的数据库的这一部分运行一些负载测试。我不确定 TreeBehavior 在廉价服务器上处理数百万行的效果如何。

于 2010-02-24T16:55:27.523 回答