我有管理员编辑员工表单的情况:添加员工时需要名字,姓氏和SSN。没有问题。我在编辑表单时遇到问题。验证SSN没有问题,因为它是一个独特的字段。
'ssn_edit' => 'required|unique:employees,ssn,' . $id
但我所遇到的问题是非独特的领域。当字段不唯一时,我不知道如何将验证设置为按ID跳过。这是FormRequest的整个规则部分:
public function rules()
{
$id = $this->input('employee_id');
return [
'first_name' => 'required',
'last_name' => 'required',
'ssn_edit' => 'required|unique:employees,ssn,' . $id
];
}
显然 - 无论字段是否填充,这都会在first_name和last_name上抛出验证错误。任何一些Laravel大师可以帮助我的方式的帮助将非常感激!
你可以做很多技巧来解决问题。但我只有两种方式..
第一个是:当您要编辑员工时,阻止发送您的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
你必须没有验证非唯一字段的错误,可能你有错误的编辑形式,设置value
属性输入像
<input type="text" value="{{ $employee->first_name }}" name="first_name">