拉拉维尔更新验证器


Laravel update Validator

如何使用更新并一次性创建验证器?现在,用户必须具有唯一的电子邮件地址。但是当我更新时,它会抛出一个错误,指出它已经存在。

我能做什么?

  $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;
});