更新 table 在 Laravel 4 中的附加列

Updating a pivot table's additional column in 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');
        });
    }

我想做的是在用户查看消息时将数据透视表 table 中的 read 列更新为 true。我让控制器确定了如何从数据透视表获取相关记录并仅更新 read 字段。

关系如下:

public function to()
{
    return $this->belongsToMany('SeriousJelly\Modules\Users\Models\User', 'message_users', 'message_id', 'user_id');
}

我不太清楚你到底想要什么。一个小的控制器代码可能会很好地了解您尝试了什么以及您正在尝试做什么。

也就是说,这可能有效。

$message->to()->updateExistingPivot($user_id, ['read'=> 1]);

使用 to 有点模棱两可,假设这是在 Message 模型上,我可能会使用 user 使其更清楚一些。

docs 有一些很好的信息。

更新每个评论

下面的代码在 Laravel 5 中有效,但我不确定 4.2。

$message->to()->sync([$user_id => ['read'=> 1]], false);