作者:Amyjionydp | 来源:互联网 | 2022-12-10 14:02
我将无法根据某些情况验证用户的电子邮件地址。
例如
如果正在创建用户,则电子邮件地址必须唯一
如果用户正在更新,但电子邮件地址未更改,请忽略唯一的电子邮件规则
如果要更新用户且其电子邮件地址已更改,则该地址必须唯一
我环顾四周,我知道我可以根据像这样的方法指定不同的规则
public function rules()
{
$user = User::find($this->users);
switch($this->method())
{
case 'POST':
{
return [
'user.email' => 'required|email|unique:users,email',
];
}
case 'PUT':
case 'PATCH':
{
return [
'user.email' => 'required|email,
];
}
default:break;
}
}
是否有任何方法可以使该规则在放置/修补情况下检查电子邮件地址是否已更改,如果必须更改,则该电子邮件地址必须是唯一的?
如果不是,有没有更干净的方法可以实现这一目标?也许没有开关盒?也许我还没有偶然发现更多的深度验证规则?
1> rkj..:
如果我对您的理解正确,那么您想unique
在电子邮件更改的情况下添加验证,如果是这样,那么您只需要在验证中添加一个条件即可。如果检查独特验证它的结构是这样的unique:table,column,except,idColumn
,检查文件
因此,验证将如下所示:当您创建新记录时,该记录$userId
将为null,但在打补丁时它将具有价值。因此,此验证将同时适用于create和patch。
$userId = isset($user) ? $user->id : null;
$rules = [
'email' => 'required|email|unique:users,email,'. $userId.',id',
];
$this->validate($request, $rules);