Php 更新期间验证用户电子邮件字段

Php 更新期间验证用户电子邮件字段,php,laravel,Php,Laravel,我是拉雷维尔的新手 目前,我正在处理用户表CRUD操作。我在创建、删除和读取时没有问题。我想用验证更新用户电子邮件列 当我将电子邮件字段设置为唯一时,在创建时没有问题,因为它可以完美地工作,没有重复的电子邮件字段 验证: $this->validate($request,[ 'email' => 'required|unique:users' ], $messages = [ 'required' => 'The :attribute field is

我是拉雷维尔的新手

目前,我正在处理用户表
CRUD
操作。我在创建、删除和读取时没有问题。我想用验证更新用户电子邮件列

当我将电子邮件字段设置为唯一时,在创建时没有问题,因为它可以完美地工作,没有重复的电子邮件字段

验证:

$this->validate($request,[
    'email' => 'required|unique:users'
],
$messages = [
        'required' => 'The :attribute field is required.',
        'unique' => 'The :attribute must be unique',
    ]
);
但是,在更新记录时,如果电子邮件字段未更改且其他字段已更改,则验证将失败,因为电子邮件是通过记录自身进行检查的,因此会出现唯一的冲突

我希望在电子邮件字段的唯一性,即使用户电子邮件已更改


有谁能给我一些建议来解决这个问题吗?

您要做的是在验证过程中忽略特定的用户ID。通过将要忽略的ID传递给您的唯一规则,Laravel将在检查电子邮件地址的唯一性时排除该用户

规则的格式为:

unique:table,column,except,idColumn
在您的场景中,您可以这样使用它:

[
    'email' => 'required|unique:users,email,' . $userId
]
其中,此场景中的
$userId
是您正在更新的用户的ID。通常,这将出现在您的请求中,因此您应该能够从那里访问它。如果要忽略的列与
id
不同,可以将其添加为规则的下一部分:

'email' => 'required|unique:users,email,' . $userId . ',other_column'
版本5.3及以上版本中唯一规则的另一种更具可读性的语法是:

Rule::unique('users')->ignore($userId),

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

   'email' => 'unique:users,email_address,'.$user->id

我想你可以试试这个:

'email'     => Auth::check()
                ? 'required|email|unique:users,email,'.Auth::id()
                : 'required|email|unique:users,email',

希望这对你有帮助

我有
user\u id
作为
$request->id
,所以我可以把它放在
$userId
中?是的,没错,你只需要把用户的id放在
$userId
的位置就可以了。好的,我会试试的。不用担心,很高兴它能帮上忙!您可以查看此链接的完整说明: