使用电子邮件唯一更新Laravel配置文件:用户

使用电子邮件唯一更新Laravel配置文件:用户,laravel,Laravel,我是新来的。我试图使个人资料更新页面。。。这一切都很好,但若我尝试应用规则将电子邮件字段设置为唯一:用户,当用户尝试更新(例如名称)时,我会遇到问题,并且不想更改电子邮件 公共功能规则() { 返回[ 'name'=>'必填项|最大值:255', 'email'=>'必需| email |最大值:255 |唯一:用户', ]; } 我想限制该用户使用其他人正在使用的电子邮件。。。但我想忽略这一点,如果这是用户配置文件中已经存在的同一封电子邮件,并且他不想更改它 公共函数updateData(U

我是新来的。我试图使个人资料更新页面。。。这一切都很好,但若我尝试应用规则将电子邮件字段设置为唯一:用户,当用户尝试更新(例如名称)时,我会遇到问题,并且不想更改电子邮件

公共功能规则()
{
返回[
'name'=>'必填项|最大值:255',
'email'=>'必需| email |最大值:255 |唯一:用户',
];
}
我想限制该用户使用其他人正在使用的电子邮件。。。但我想忽略这一点,如果这是用户配置文件中已经存在的同一封电子邮件,并且他不想更改它

公共函数updateData(UpdateDataRequest$请求)
{
DB::表('用户')
->其中('id',Auth::user()->id)
->更新(数组('email'=>$request->email,'name'=>$request->name));
返回重定向(“面板”);
}

如何做好这件事?

文档中以这种情况为例

强制唯一规则忽略给定ID:

有时,您可能希望在唯一检查期间忽略给定的ID。例如,考虑一个“更新配置文件”屏幕,该屏幕包括用户的姓名、电子邮件地址和位置。当然,您需要验证电子邮件地址是否唯一。但是,如果用户仅更改名称字段而不更改电子邮件字段,则不希望引发验证错误,因为该用户已经是电子邮件地址的所有者。仅当用户提供的电子邮件地址已被其他用户使用时,才希望引发验证错误。要告诉唯一规则忽略用户ID,可以将ID作为第三个参数传递:

'email' => 'unique:users,email_address,'.$user->id
'email' => 'unique:users,email_address,'.$user->id.',user_id'
如果表使用的主键列名不是id,则可以将其指定为第四个参数:

'email' => 'unique:users,email_address,'.$user->id
'email' => 'unique:users,email_address,'.$user->id.',user_id'
在新版本中
laravel
使用规则忽略用户或记录

$user->id
可以是特定id,也可以是当前登录用户的id

尝试此验证(Laravel 8.x)


非常感谢你的帮助!对于任何登陆此页面的用户,此答案在Laravel 8中仍然正确。每个文档的电子邮件验证规则为:
唯一:表、列、除、idColumn
。因此,如果使用默认迁移,您可以像这样使用它:
“email | unique:users,email”。auth()->user()->id
。这不起作用。您包括了
确认
,这需要另一个字段用于
电子邮件确认
。OP没有提到第二个电子邮件确认字段。在唯一规则上传递用户模型似乎也不起作用。。