Обновление дополнительного столбца сводной таблицы в Laravel 4
У меня есть следующая схема:
public function up()
{
Schema::create('messages', function(Blueprint $table) {
$table->increments('id');
$table->mediumText('subject');
$table->text('message');
$table->boolean('draft');
$table->integer('sender_id')->unsigned();
$table->softDeletes();
$table->timestamps();
$table->foreign('sender_id')->references('id')->on('users')->onUpdate('cascade');
});
Schema::create('message_assets', function(Blueprint $table) {
$table->increments('id');
$table->integer('message_id')->unsigned();
$table->string('filename', 255);
$table->softDeletes();
$table->foreign('message_id')->references('id')->on('messages')->onUpdate('cascade');
});
Schema::create('message_users', function(Blueprint $table) {
$table->increments('id');
$table->integer('message_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->integer('read')->default(0);
$table->string('folder', 255)->nullable();
$table->softDeletes();
$table->foreign('message_id')->references('id')->on('messages')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade');
});
}
Что я хотел бы сделать, это обновить read
столбец в сводной таблице, чтобы истина, когда пользователь просматривает сообщение. У меня есть контроллер прибил его, как я могу получить соответствующую запись из сводной и обновить read
только поле
Вот отношения:
public function to()
{
return $this->belongsToMany('SeriousJelly\Modules\Users\Models\User', 'message_users', 'message_id', 'user_id');
}
1 ответ
Решение
Мне немного неясно, что именно вы хотите. Небольшой код контроллера может быть полезен для просмотра того, что вы пробовали и что вы пытаетесь сделать.
Тем не менее, это может работать.
$message->to()->updateExistingPivot($user_id, ['read'=> 1]);
С помощью to
немного двусмысленно, я мог бы использовать user
чтобы сделать это немного более ясным, предполагая, что это на Message
модель.
Документы имеют хорошую информацию.
ОБНОВЛЕНИЕ ПО КОММЕНТАРИЮ
Код ниже работает в Laravel 5, но я не уверен с 4.2.
$message->to()->sync([$user_id => ['read'=> 1]], false);