如何使用更新并一次性创建验证器?现在,用户必须具有唯一的电子邮件地址。但是当我更新时,它会抛出一个错误,指出它已经存在。
我能做什么?
$validator = Validator::make($request->all(), [
'RoleId' => 'required|numeric',
'DepartmentId' => 'required|numeric|max:10',
'FirstName' => 'required|string|max:50',
'LastName' => 'required|string|max:50',
'email' => 'required|email|unique:employee|max:50',
'Gender' => 'required|numeric|max:1',
'password' => 'required|max:50',
'Address' => 'required|string|max:50',
'Zip' => 'required|string|max:50',
'City' => 'required|string|max:50',
'BirthDate' => 'required:date|max:10',
'StartDate' => 'required:date|max:10',
'EndDate' => 'required:date|max:10',
'Suspended' => 'required:numeric:max:1'
]);
首先,
我假设你在Laravel 5上。如果不是,则这可能不适用。但是,您可以指定要忽略唯一验证上的行:
'email' => 'required|email|max:50|unique:employee,email,' . $input->id,
因此,您可以在之前检查并调整验证器字符串,也可以使用 sometimes
选项。您只需要创建一个隐藏字段或传递 $model->id
值的内容。
<input type='hidden' value='{{$model->id}}' name='id' />
选项 1
$email_validator = "unique:employee,email";
if($request->input('id',0) > 0) {
$email_validator .= "," . $request->input('id');
}
$validator = Validator::make($request->all(), [
...
'email' => 'required|email|max:50|' . $email_validator,
...
]);
选项 2
$validator = Validator::make($request->all(), [
...
'email' => 'required|email|max:50',
...
]);
$validator->sometimes('email','unique:employee,email,' . $request->input('id'),function($input){
return $input->id > 0;
});
$validator->sometimes('email','unique:employee',function($input){
return $input->id == 0;
});