Я пытаюсь сделать функциональность сообщений похожей на 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 может видеть весь разговор, который у него был.