2017-02-14 7 views
0

Im создание сайта, на котором пользователи могут размещать и читать сообщения друг друга. Я хочу, чтобы все пользователи могли отмечать сообщения, которые они прочитали, показывая только сообщения, которые не читаются. Это также должно быть возможно отменить. Поэтому у меня есть модель и таблица для пользователей и сообщений.Создать или обновить с помощью Laravel

То, как я думал, это создание таблицы PostsRead, которая будет содержать уникальный идентификатор пользователя и сообщения. Затем я мог бы получить все сообщения и удалить их из таблицы PostsRead. Таким образом, вопрос (ы):

1) Это хороший способ (наилучшая практика-иш) сделать это?

2) Как? Думаю, мне нужно проверить, есть ли запись в таблице PostsRead, содержащей пару user_id/post_id. Если это не так, вставьте новую строку. И если это так, я думаю, мне нужно обновить текущую строку. Возможно, это должно иметь логическое поле, указывающее, прочитано ли сообщение или нет. Каким будет код для этого?

Когда я прохожу через него в голове, этот подход кажется ... странным. Неужели я ошибаюсь? Надеюсь, этот вопрос был понятен.

ответ

0

Да, это самая лучшая практика для этого.

Создать таблицу с именем «user_read» с «user_id» и «POST_ID» (как в качестве первичного ключа)

Schema::create('user_read', function (Blueprint $table) { 
    $table->integer('user_id')->unsigned()->index(); 
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

    $table->integer('post_id')->unsigned()->index(); 
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); 
    $table->timestamps(); 

    $table->primary(['user_id', 'post_id']); 
}); 

Чтобы установить его, вы должны иметь это соотношение в вашей модели.

User.php

public function reads() 
{ 
    return $this->belongsToMany(Post::class, 'user_read', 'user_id', 'post_id') 
      ->withTimestamps(); 
} 

Чтобы сохранить новый пост, пользователь прочитал вы можете просто сделать

//1 and 3 are the posts ids 
$user->reads()->sync([1, 3]); 
Смежные вопросы