CakePHP PrivateMessage架构和关联

我以为我找到了解决问题的方法,但是,我的做法并不符合我的所有需求。因此,我诉诸你的建议。这基本上是我想要实现的目标: 我有3个数据库表: 用户:id,username,... private_messages:id,... private_messages_users:id,private_message_id,sender_id,recipient_id,status 查看此数据库模式,您会注意到,对于每条消息,我在连接表中创建了一行,这意味着如果我向两个收件人发送邮件,则连接表中将有两个插入的行。如果你有更好的方法,我愿意接受建议。 我需要定义关联以便: 能够撰写信息;在撰写表单中,我想有一个多列表,我可以从中选择我想要发送邮件的收件人;发送者在这里并不重要,因为我会在保存前手动将其添加到$ this-> data数组中 能够创建一个收件箱和一个已发送的文件夹,我将分别获取收到的所有收到的邮件 能够查看已发送的消息以及发送给它的所有收件人 能够在用户第一次查看时将消息标记为已读 另外,对于每个sender_id和recipient_id,我想从users表中获取用户名 我希望所有请求的操作都是'cakily'完成的,这意味着没有'hacks'或方法来转换数组。只是简单的操作,完全基于创建的关联。 任何帮助都将受到高度赞赏,因为我正在努力解决这个问题一个多星期。非常感谢你!     
已邀请:
我想你会想要这样的设置:
Users
hasMany
UserMessage
然后创建一个代表你的HABTM表的
UserMessageUsers
模型。在该表中,您将有一个名为
read
的列,表示收件人是否以及哪个收件人已阅读该邮件。 这里有一些SQL可以运行来设置我正在谈论的内容的示例,以便您可以想象这个想法。
CREATE TABLE `users` (                                        
  `id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,             
  `name` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,   
  `email` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,  
   PRIMARY KEY (`id`)                                          
) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

CREATE TABLE `user_messages` (
  `id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,               
  `user_id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,          
  `subject` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,  
  `body` TEXT COLLATE utf8_unicode_ci,         
  PRIMARY KEY (`id`)          
) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

CREATE TABLE `user_messages_users` (                            
  `id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,               
  `user_message_id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,  
  `user_id` CHAR(36) COLLATE utf8_unicode_ci NOT NULL,          
  `read` TINYINT(1) DEFAULT '0',                                
  PRIMARY KEY (`id`)                                            
) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
我使用UUID作为一切,因此
CHAR(36)
列。 所以让我们说一个用户,“Bob”发送一封电子邮件给“Sally”和“Bill”,将有一条记录放入
user_messages
,链接回“Bob”作为创建者。然后在
user_messages_users
中会有两条记录将特定的
user_messages
记录与“Sally”和“Bill”相关联 现在,如果“Sally”读取消息,则特定的
user_messages_users
记录将其
read
列更改为1 - 表示她已阅读该消息。 “鲍勃”的记录将保持为0 - 表示他没有阅读。 要在HABTM表上执行更改,您需要为其创建模型。 CakePHP书谈到了这一点,特别是关系的
with
选项。     

要回复问题请先登录注册