Laravel 5.6:如果字段存在且未更改,则跳过验证步骤。如果字段IS更改,则为必填字段-但不是唯一的

时间:2019-03-01 05:21:03

标签: php laravel laravel-5.6 laravel-validation

我遇到了管理员编辑员工表单的情况:添加员工时,名字,姓氏和SSN是必需的。那里没有问题。我有问题的地方是在编辑表格时。验证SSN是唯一字段,因此我没有问题。

printf("\e[?25l");

但是我确实有一个问题是非唯一字段。我不知道当字段不是唯一时如何设置验证以按ID跳过。这是FormRequest的整个规则部分:

'ssn_edit' => 'required|unique:employees,ssn,' . $id

很明显-无论是否填充该字段,都会在first_name和last_name上引发验证错误。 你们中的一些Laravel大师可以提供的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

验证非唯一字段一定不会出错,可能是您的编辑表单有误,将value属性设置为像这样输入

<input type="text" value="{{ $employee->first_name }}" name="first_name">

答案 1 :(得分:0)

您可以采取许多技巧来解决问题。但是我只有两种方法。

第一个是:防止在要编辑员工时发送ssn_edit值

示例:

<input type="text" value="{{ isset($employee) ? $employee->ssn_edit : old('ssn_edit') }}" @isset($employee) disabled @endisset name="ssn_edit">

public function rules()
{
    $id = $this->input('employee_id');
    return [
        'first_name' => 'required',
        'last_name' => 'required',
        'ssn_edit' => 'required|sometimes|unique:employees,ssn,' . $id
    ];
}

第二个是:在验证员工之前检查您的方法。是POST还是PUT,如果是PUT,请不要在验证中添加唯一规则。

结论:每次调用验证时,验证都会生效,无论您是编辑还是添加新员工。 #CMIIW