Я создаю laravel веб-сайт, который имеет функцию обмена сообщениями. Я хотел бы принять во внимание следующие факторы:
- Обе стороны (отправитель и получатель) имеют возможность удалять сообщения в их конце.
- , если какой-либо из стороны удалили сообщение, другая сторона должна все еще иметь доступ к сообщению.
- сообщение может иметь вложения.
Я подумал о следующей схеме, но думаю, что в ней слишком много дублирования. и я ищу что-нибудь получше, если есть.
messages table:
-----------------
id
title
body
received_messages table:
------------------------
message_id
receiver_id
sender_id
is_read
sent_messages table:
------------------------
message_id
receiver_id
sender_id
Редактировать: Мне пришла в голову другая схема:
messages table:
-----------------
id
title
body
user_messages table:
-----------------
message_id
sender_id
receiver_id
sender_del // indicates that the sender deleted the message in their end
receiver_del // indicates that the receiver deleted the message in their end
read_at // timestamp null by default
Когда одна из сторон выберет удалить сообщение, соответствующее поле (sender_del, receiver_del) будет истинным, так что сообщение не будет показано этому человеку
При использовании предыдущей схемы сообщение будет удалено только из БД, если обе стороны удалили ее
<?php
$user = auth()->user();
$received = $user->receivedMessages; // to get received messages
$sent = $user->sentMessages; // to get sent messages
. Любые предлагаемые изменения, какую схему использовать или новую схему приветствуются. Спасибо.