Laravel - 更新关系表上的字段

时间:2016-09-20 15:37:13

标签: laravel laravel-5 eloquent

我有一个users表,一个emails表和一个user_email表。在该连接表中,我有user_idemail_idis_confirm(布尔值)。当用户确认他的电子邮件时,我想更新该字段,并尝试使用以下方法执行此操作:

User模型中:

public function emails() {
    return $this->belongsToMany('App\Email', 'user_email')->withPivot('is_confirm');
}

Email模型中:

public function users() {
    return $this->belongsToMany('App\User', 'user_email')->select(['user_email.is_confirm', 'user_email.id']);
}

我试过了:

$emailID = Email::where('email', $email)->first();
$pivot = Email::find($emailID->id)->users->first();
$pivot->is_confirm = 1;
$pivot->save();

我也尝试过:

$emailID = Email::where('email', $email)->first();
$emailID->users()->updateExistingPivot( $emailID->user_id, ['is_confirm' => 1] );

然而,两种选择都不起作用。

我的两个模特的关系看起来都合适吗?我该如何更新此字段?

1 个答案:

答案 0 :(得分:1)

我认为答案如下:

User::find(1)->emails()->updateExistingPivot($emailId, ['is_confirm' => 1]);

但我很好奇是否有任何理由is_confirm不能出现在电子邮件桌面上?此外,如下所述,如果电子邮件只能绑定到一个用户,请考虑将外键user_idis_confirm一起直接移至电子邮件表。