2010-02-19 10 views
0

J'essaye de faire une fonctionnalité de messages semblable au facebook. Juste le message et pas facebook. Une brève description aime ça.Relations CakePHP - Comment configurer la relation pour le système de messagerie?

1) Il y a un certain nombre d'utilisateurs (table utilisateur) 2) Une personne peut envoyer un message à une ou plusieurs personnes. 3) Il peut y avoir plusieurs réponses au même message. 4) Si c'est envoyer à plusieurs personnes. Tout le monde peut répondre et c'est montrer à tous.

Tables utilisées

messages Table

id 
timestamp 
sender_id 
subject 
message 
due_date 
urgent_flag 
open_flag 
reply_id 

message_user (tableau)

id 
timestamp 
message_id 
receiver_id 
read_flag 

Les relations CakePHP sont les suivantes:

message Modèle

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', 
     ) 
); 

MessageUser Modèle

var $belongsTo = array (
    'User' => array (
     'className' => 'User', 
     'foreignKey' => 'receiver_id', 
    ), 
    'Message' => array (
     'className' => 'Message', 
     'foreignKey' => 'message_id' 

    ) 
); 

Questions:

1) est mon approche correcte? Ou le schéma de base de données doit être révisé. 2) Si oui, comment dois-je récupérer les données pour la boîte de réception? C'est un peu complexe car je veux montrer la conversation pour les messages que les gens m'ont envoyés. Par exemple, l'utilisateur 1 envoie un message à l'utilisateur 2. L'utilisateur 2 ajoute 2 réponses à la même chose. Alors la boîte de réception des utilisateurs 1 devrait montrer seulement 1 message. et quand je l'ouvre. il va montrer les messages précédents aussi .. (c'est similaire à facebook)

Un autre problème que je vois ici est, Comment supprimer les messages? Supposons que l'utilisateur 1 supprime un message qu'il ne doit rien afficher dans sa boîte de réception. mais l'utilisateur 2 peut voir toute la conversation qu'il a eue.

Répondre

0

On dirait une bonne approche

Quant à votre dernier problème. Ajouter une colonne tinyint/datetime à message_user, ex. "supprimé" (ou quelque chose de similaire).

Ensuite, dans votre modèle utilisateur-faire quelque chose comme:

var $hasAndBelongsTo=array(
    'Message' => array (
     'joinTable' => 'message_user', 
     'className' => 'Message', 
     'foreignKey' => 'reciever_id', 
     'associationForeignKey' => 'message_id' 
     'conditions' => 'MessageUser.delete = 0' 
     ) 
); 

Vous aurez besoin de modifier, mais il est un bon début ...

+0

Mais comment récupérer les données de la boîte de réception ??? –