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
的位置就可以了。好的,我会试试的。不用担心,很高兴它能帮上忙!您可以查看此链接的完整说明: