Cakephp中的关系问题。如何获取数据?

Cakephp中的关系问题。如何获取数据?,cakephp,relationship,Cakephp,Relationship,我正在尝试创建一个类似于facebook的消息功能。只是信息,而不是facebook。一个简短的描述就是这样的 1有多个用户用户表2一个人可以向一个人或多个人发送消息。3同一消息可以有多个回复。4如果发送给多人。所有人都可以回复,并向所有人展示 使用的表格 消息表 id timestamp sender_id subject message due_date urgent_flag open_flag reply_id 消息用户表 id timestamp message_id receive

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

1有多个用户用户表2一个人可以向一个人或多个人发送消息。3同一消息可以有多个回复。4如果发送给多人。所有人都可以回复,并向所有人展示

使用的表格

消息表

id
timestamp
sender_id
subject
message
due_date
urgent_flag
open_flag
reply_id
消息用户表

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'

    )
);
问题:

我的方法正确吗?或者需要修改数据库架构。2如果是,我应该如何获取收件箱中的数据?这有点复杂,因为我想展示人们发送给我的那些消息的对话

例如,用户1向用户2发送消息。用户2向同一条添加2条回复。那么用户1的收件箱应该只显示1条消息。当我打开它的时候。它还将显示以前的MSG。。这类似于facebook


我在这里看到的另一个问题是,如何删除邮件?假设用户1删除了一条消息,它不应该在其收件箱中显示任何内容。但是用户2可以看到他进行的整个对话。

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

我的评论提到了树的行为。简单地说,它允许您轻松地将其体系结构数据存储到关系数据库表中。我不会重复手册,但请查看并在谷歌上搜索示例。我很确定这就是你想要用于线程回复的内容


还有一点要注意——如果您打算在大量用户中使用它,请在数据库的这一部分上运行一些负载测试。我不确定TreeBehavior在廉价服务器上处理数百万行的效果如何。

如果您认为线程化回复很常见,我建议使用表上的树行为,因为它会使您更容易获取完整的线程。您能详细解释一下吗。。