Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 04.03.2018 18:31:22

Помогите настроить связи между таблицами

Здравствуйте. Есть три таблицы. Users, Conversations, Messages.

Таблица Conversations имеет три столбца id, id_first_user, id_second_user

Таблица Messages имеет два столбца conversation_id(id c таблицы Conversation) и message

Как грамотно настоить связи между этими таблицами в базе и между моделями?

Не в сети

#2 04.03.2018 20:19:42

Re: Помогите настроить связи между таблицами

Есть два способа — через hasMany и belongsToMany.

Я бы сделал две belongsToMany связи в модели User и была всего одна pivot таблица messages с полями sender_id, receiver_id и message.

Не в сети

#3 06.03.2018 19:24:02

Re: Помогите настроить связи между таблицами

Тебе нужно еще таблица converstion_user

User::belongsToMany(Conversation)
User::hasMany(Message)

Conversation::belongsToMany(User)
Conversation::hasMany(Message)

Message::belongsTo(User) // в сообщение обязательно должно быть user_id иначе как мы узнаем кто его отправил. у тебя его нет. так же сюда можно засунуть read_at чтобы отображать прочитано оно или нет
Message::belongsTo(Conversation)

связку user->conversation можно еще объявить как

// User
public function conversations()
     {
         return $this->belongsToMany(Conversation::class)
            ->withPivot('name') // сюда можно положить название которое будет отображаться для каждого участника диалога. например если общаются Василий с Петром то для Василия диалог будет отображатьс как "Петр", а для Петра как "Василий"
            ->withTimestamps();
     }

Пишу бэкенд для своего мобильного приложения, делюсь с миром, заходите посмотреть, много всего интересного https://youtu.be/C5M6-ycJ5gs

Не в сети

Подвал раздела