我正在尝试为我的用户实现一个简单的消息传递系统。
我不是habtm专家,所以任何帮助将不胜感激!
这是我到目前为止得到的,请提出任何建议!!(蛋糕1.3)
CREATE TABLE IF NOT EXISTS `app_messages` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`from_user_id` int(8) unsigned DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`body` text,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `app_messages_users` (
`id` int(8) unsigned NOT NULL,
`message_id` int(8) unsigned NOT NULL,
`to_user_id` int(8) unsigned NOT NULL,
`read` tinyint(1) DEFAULT '0',
`replied` tinyint(1) NOT NULL DEFAULT '0',
`trash` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
Message.php
var $hasAndBelongsToMany = array(
'User' =>
array(
'className' => 'User',
'joinTable' => 'messages_users',
'foreignKey' => 'message_id',
'associationForeignKey' => 'to_user_id',
'unique' => true
)
);
User.php
var $hasMany = array(
'Message' => array(
'className' => 'message',
'foreignKey' => 'from_user_id',
'dependent' => true
)
所以现在,我的问题是,我这样做正确吗?
如何创建 SEND MESSAGE 函数,以向两个表插入正确的值?我是一个关于HABTM关系的菜鸟,但我正在努力学习。花了几个小时在网上阅读它,但仍然需要问我是否走对了路。
谢谢你的时间!!-汤姆
鉴于您的连接表具有其他字段(read
、replied
、trash
),则不应使用 HABTM 关系。如果这样做,您将无法从应用程序访问它们。因此,您应该通过联接表的新模型配置两个 hasMany 关联。这在食谱中得到了很好的解释。
所以你最终会得到这样的东西:
// User.php
class User extends AppModel {
public $hasMany = array(
'MessageUser' /* you can call this 'SentMessage' or something that makes more sense */
);
}
// Message.php
class Message extends AppModel {
public $hasMany = array(
'MessageUser'
);
}
// MessageUser.php
class MessageUser extends AppModel {
public $belongsTo = array(
'User', 'Message'
);
}