我有一个users
表,一个emails
表和一个user_email
表。在该连接表中,我有user_id
,email_id
和is_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] );
然而,两种选择都不起作用。
我的两个模特的关系看起来都合适吗?我该如何更新此字段?
答案 0 :(得分:1)
我认为答案如下:
User::find(1)->emails()->updateExistingPivot($emailId, ['is_confirm' => 1]);
但我很好奇是否有任何理由is_confirm
不能出现在电子邮件桌面上?此外,如下所述,如果电子邮件只能绑定到一个用户,请考虑将外键user_id
与is_confirm
一起直接移至电子邮件表。