2012-04-09 53 views
1

我想爲我的用戶實現一個簡單的消息傳遞系統。cakephp消息系統方案/模型/控制器最佳實踐?

我不是一個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關係的總noob,但我正在努力學習。已經花了幾個小時在網上閱讀它,但仍然需要問我是否正確的方式。

感謝您的時間! -Tom

+0

你可以在我的「對話」 SQL表@ https://groups.google.com/d/msg/cake-看看php/BlOQsyuFnEc/2YXduSde0mwJ。這通過對話將它們分組在一起減少了冗餘。然後使用3個表格。 – mark 2012-04-10 00:24:45

+0

看一看,實際上,我已經在擺弄某些指令/最佳方法時已經看過那些討論;)發送時如何在模型/控制器中保存消息等等? – Tom 2012-04-10 00:40:30

回答

0

鑑於你的連接表有額外的字段(readrepliedtrash),你不應該使用HABTM關係。如果這樣做,您將無法從應用程序訪問它們。相反,您應該通過連接表的新模型配置兩個hasMany關聯。它很好地解釋了here in the CookBook

所以你最終有這樣的事情:

// 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' 
    ); 
}