Обновление дополнительного столбца сводной таблицы в 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);
Другие вопросы по тегам