Как сохранить количество непрочитанных сообщений для группового чата в приложении Laravel - PullRequest
0 голосов
/ 16 марта 2020

Я прочитал все ответы, но все еще не получил ответ, который ищу. Здесь позвольте мне объяснить, что у меня есть, и я сделал до сих пор.

Я создал приложение для чата, в котором пользователь может иметь двойной или групповой чат. у меня следующая структура базы данных:

chatrooms

id | creator_id (who created chatroom)  | type (duo/group) |  group_id (if chatroom type is 'group')

messages

id  |  chatroom_id  |  senders_id  |  recipient_id  | message  |  read(by default 0)

У меня есть еще одна таблица для отслеживания участников чата

chatroom_user

id  | chatroom_id   | user_id 

Теперь все работает нормально для чатов типа дуэт. Я получаю количество непрочитанных сообщений для двойного чата, выполнив этот запрос:

return auth()->user()
            ->chatrooms()
            ->withCount(['messages' => function (Builder $query) {
                $query->where('read', 0)->where('recipient_id', auth()->user()->id);
            }])
            ->get();

И это прекрасно работает :)

Но теперь, если у меня есть групповой чат, у меня несколько получателей. я не могу сделать то, что сделал выше. Итак, я создал еще одну сводную таблицу

message_recipient

id | message_id  |  recipient_id  | read

Теперь я могу отслеживать непрочитанные сообщения для указанного пользователя c. Но проблема в том, что когда я сохраняю сообщение, мне нужно добавить сюда столько строк, сколько получателей и сколько для каждого сообщения. Предположим, у меня есть группа из 10 человек, если кто-то отправит сообщение «привет», мне нужно поместить 10 записей в эту таблицу (на самом деле 10-1). Итак, мой вопрос: это будет проблема производительности? Есть ли лучший способ справиться с такой ситуацией?

...