2012-04-09 5 views
1

Ich versuche ein einfaches Messaging-System für meine Benutzer zu implementieren.curephp messaging System Schema/Modell/Controller Best Practice?

Ich bin kein Experte, also jede Hilfe wird geschätzt!

Hier ist, was ich bis jetzt bekommen habe, bitte machen Sie irgendwelche Vorschläge !! (cake1.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  
     ) 

So, jetzt ist meine Frage, mache ich das richtig?

Wie gehe ich herum, indem ich eine SEND MESSAGE-Funktion erstelle, um korrekte Werte in beide Tabellen einzufügen? Ich bin ein totaler Noob in Bezug auf HABTM Beziehungen, aber ich versuche zu lernen. Ich habe mehrere Stunden damit verbracht, im Internet darüber zu lesen, aber ich muss immer noch fragen, ob ich auf dem richtigen Weg bin.

Danke für Ihre Zeit !! -Tom

+0

Sie einen Blick auf meine „Konversationen“ SQL-Tabelle nehmen @ https://groups.google.com/d/msg/cake- php/BlOQsyuFnEc/2YXduSde0mwJ. Dies reduziert die Redundanz, indem sie über Konversation gruppiert werden. verwendet dann 3 Tabellen. – mark

+0

Hatte einen Blick, und eigentlich habe ich mir diese Diskussion schon mal angeschaut, wenn ich ein paar Anleitungen/beste Ansätze herumexperimentiere;) Wie gehst du in den Modellen/Controllern vor um die Nachrichten beim Senden zu speichern und so weiter? – Tom

Antwort

0

Da Ihre Join-Tabelle weitere Felder hat (read, replied, trash), sollten Sie keine HABTM Beziehung verwenden. Wenn Sie dies tun, können Sie in Ihrer Anwendung nicht darauf zugreifen. Stattdessen sollten Sie zwei hasMany-Verknüpfungen über ein neues Modell für die Join-Tabelle konfigurieren. Es ist gut erklärt here in the CookBook.

So werden Sie so etwas wie dies am Ende mit:

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