Как различить отправителя и получателя в приложении чата Laravel? - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю приватное (один к одному) приложение чата в Laravel 5.7.Проблема со схемой, я думаю.Если user1 вошел в систему и создает новый диалог с user2 .Это будет создано с разговор_ид = 1 .В следующий раз, когда в систему войдет user2 , давайте предположим, что он найдет свой ID в столбце отправителя и не найдет свой ID в sender_column, новый разговор будетбыть создан, который не должен быть создан, потому что для создания нового диалога мы должны проверить оба столбца отправителя и получателя.

Вот моя схема

    =======User Table========
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

    =============Chat Table=============
    Schema::create('chats', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user1_id')->nullable();
        $table->foreign('user1_id')->references('id')->on('users');
        $table->unsignedInteger('user2_id')->nullable();
        $table->foreign('user2_id')->references('id')->on('users');
        $table->timestamps();
    });

    ===============Messages Table================
    Schema::create('messages', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('chat_id')->nullable();
        $table->foreign('chat_id')->references('id')->on('chats');
        $table->text('messages');
        $table->timestamps();

    });

Может быть, вы понимаете это под этим.

Users                            Chats                                
id    name          chat_id    user1_id    user2_id
1     Mark             1           1           2
2     David            2           2           1
3     Henzard          3           2           3
                       4           3           2

Пожалуйста, предложите мне лучшее решение.

1 Ответ

0 голосов
/ 28 сентября 2018

Возможно, я упустил из виду одну или несколько сложностей со схемой, но я пришел к следующему:

users - Сохранить таблицу существующих пользователей.

разговоров - это будет представлять отдельный разговор, инициирующего пользователя и дату начала разговора.

- id
- user_id           # user who initiated conversation
- created_at

разговор_пользователя - Это будет представлять каждого пользователя, который являетсячасть разговора.Хотя в ваших требованиях указано, что каждый диалог ведется между двумя пользователями, эта структура позволит вам проводить групповые беседы и в будущем - если это когда-либо потребуется.

При желании вы можете добавить отметку времени read_at для хранениядата / время, когда пользователь последний раз читал разговор.Затем это можно использовать для определения, имеет ли пользователь непрочитанные сообщения в беседе.

- id
- conversation_id
- user_id
- read_at           # when user last read conversation
- created_at

messages - Это будет представлять одно сообщение в беседе.Только отправляющий пользователь должен быть зарегистрирован, потому что пользователи, которые могут прочитать сообщение, продиктованы таблицей conversation_user.

- id
- conversation_id
- user_id           # user who sent message
- message
- created_at
- updated_at
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...