我有以下架构:
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
列更新为true。我让控制器发现了它如何从枢轴获取相关记录并仅更新read
字段。
这是关系:
public function to()
{
return $this->belongsToMany('SeriousJelly\Modules\Users\Models\User', 'message_users', 'message_id', 'user_id');
}
答案 0 :(得分:1)
我对你究竟想要什么有点不清楚。一个小的控制器代码可能很高兴看到你尝试了什么以及你想要做什么。
那说,这可能有效。
$message->to()->updateExistingPivot($user_id, ['read'=> 1]);
使用to
有点含糊不清,我可以使用user
来更清楚地假设它在Message
模型上。
docs有一些很好的信息。
更新评论
以下代码适用于Laravel 5,但我不确定4.2。
$message->to()->sync([$user_id => ['read'=> 1]], false);