CakePHP Relationships - Как настроить отношения для системы сообщений? - PullRequest
0 голосов
/ 19 февраля 2010

Я пытаюсь сделать функциональность сообщений похожей на Facebook.Просто вещь сообщения, а не Facebook.Краткое описание действительно так.

1) Количество пользователей (таблица пользователей) 2) Один человек может отправить сообщение одному или нескольким лицам.3) Может быть несколько ответов на одно и то же сообщение.4) Если его отправить нескольким людям.Все могут ответить, и это показать им всем.

Используемые таблицы

таблица сообщений

id
timestamp
sender_id
subject
message
due_date
urgent_flag
open_flag
reply_id

message_user (таблица)

id
timestamp
message_id
receiver_id
read_flag

Отношения CakePHP следующие:

Модель сообщения

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

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

    )
);

Вопросы:

1) Верен ли мой подход?Или схема базы данных должна быть пересмотрена.2) Если да, как я должен получить данные для входящих?Это немного сложно, так как я хочу показать разговор для тех сообщений, которые мне прислали.

Например, пользователь 1 отправляет сообщение пользователю 2. Пользователь 2 добавляет 2 ответа к тому же.Тогда в папке «Входящие» пользователей 1 должно отображаться только 1 сообщение.и когда я открою это.он также покажет предыдущие сообщения .. (это похоже на facebook)

Еще одна проблема, которую я вижу здесь, как удалить сообщения?Предположим, что пользователь 1 удаляет сообщение, которое он не должен показывать в своем почтовом ящике.но пользователь 2 может видеть весь разговор, который у него был.

1 Ответ

0 голосов
/ 19 февраля 2010

похоже на хороший подход

Что касается вашей последней проблемы. Добавьте столбец tinyint / datetime в message_user, напр. «удален» (или что-то подобное).

Затем в вашей пользовательской модели сделайте что-то вроде:

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

Вам нужно изменить это, но это начало ...

...