只是旁注,这个问题的大多数答案都谈到email_address
而在 Laravel 内置的身份验证系统中,电子邮件字段名称只是email
。以下是如何验证唯一字段(即有关更新的电子邮件)的示例:
In a 表格请求,你确实喜欢这样:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,'.$this->user->id,
];
}
或者,如果您直接在控制器中验证数据:
public function update(Request $request, User $user)
{
$request->validate([
'email' => 'required|email|unique:users,email,'.$user->id,
]);
}
Update:
如果您正在更新登录用户并且没有注入User
model 到你的路由中,访问时可能会遇到未定义的属性id
on $this->user
。在这种情况下,请使用:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,'.$this->user()->id,
];
}
自 Laravel 5.7 以来更优雅的方式是:
public function rules()
{
return [
'email' => ['required', 'email', \Illuminate\Validation\Rule::unique('users')->ignore($this->user()->id)]
];
}
P.S:我添加了一些其他规则,即必需的和电子邮件,以便让新手清楚地了解这个示例。