Php Laravel:更新时句柄唯一
在更新过程中,我正在对员工记录进行验证。有些字段应该是唯一的。但是在更新员工记录的过程中,将对唯一字段进行验证。我也研究并尝试了这个解决方案。 但我得到了一个错误: 错误代码:904错误消息:ORA-00904:“ID”:无效标识符 位置:71语句:从中选择count()作为聚合 “员工”,其中“电子邮件”=:p0和“ID”:p1绑定: [ad@sdfdsf.com,3336](SQL:从中选择count()作为聚合 “员工”,其中“电子邮件”=ad@sdfdsf.com及“ID”3336) 以下是我对解决方案的尝试: 有时,您可能希望在唯一检查期间忽略给定的ID。 例如,考虑一个“更新配置文件”屏幕,其中包括 用户名、电子邮件地址和位置。当然,你会想要的 验证电子邮件地址是否唯一。但是,如果用户仅 更改名称字段而不是电子邮件字段,则不需要 要引发的验证错误,因为用户已经是的所有者 电子邮件地址 为了指示验证器忽略用户的ID,我们将使用规则 类以流畅地定义规则。在本例中,我们还将指定 将验证规则作为数组,而不是使用|字符 界定规则:Php Laravel:更新时句柄唯一,php,laravel,Php,Laravel,在更新过程中,我正在对员工记录进行验证。有些字段应该是唯一的。但是在更新员工记录的过程中,将对唯一字段进行验证。我也研究并尝试了这个解决方案。 但我得到了一个错误: 错误代码:904错误消息:ORA-00904:“ID”:无效标识符 位置:71语句:从中选择count()作为聚合 “员工”,其中“电子邮件”=:p0和“ID”:p1绑定: [ad@sdfdsf.com,3336](SQL:从中选择count()作为聚合 “员工”,其中“电子邮件”=ad@sdfdsf.com及“ID”3336) 以
我发现了错误,并成功地找到了解决办法。这是一个有效的解决方案,以防任何人面临类似的问题。我必须传递单个用户的employee\u id,而我传递的是多个用户的employee\u id
public function update(Request $request, int $employee_id) {
$this->validate ( $request, [
'first_name' => "required|max:220|regex:/[a-z]/",
'middle_name' => "max:120",
'last_name' => "required|max:220|regex:/[a-z]/",
'email' => "required|unique:employees,email,".$employee_id.',employee_id|regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/',
'home_phone' => "unique:employees,home_phone,$employee_id,employee_id|numeric",
'mobile' => "required|unique:employees,mobile,$employee_id,employee_id|numeric",
'job_id' => 'required',
'department_id' => 'required',
'group_id' => 'required',
'node' => 'required',
'branch' => 'required',
'username' => "required|unique:employees,username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
'exchange_username' => "required|unique:employees,exchange_username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
'extension' => "required|unique:employees,mobile,$employee_id,employee_id|numeric|regex:/[0-9]{4}/",
] );
Employee::where ('employee_id', $employee_id )->update ( $request->only ( [
'first_name',
'middle_name',
'last_name',
'email',
'address',
'home_phone',
'mobile',
'job_id',
'department_id',
'group_id',
'branch',
'node',
'name',
'username',
'type',
'exchange_username',
'toggle_ivr_access',
'extension',
'attributed_team',
'cable_team_id',
'disable',
] ) );
Session::flash ( 'message', 'The Employee is Successfully Updated.' );
return redirect ()->route ( 'employees.index' );
}
检查您的列名。必须输入有效的列名。当你没有发现这个错误时,我已经检查过了。列名正确。哪一行是
71
?请查看我下面更新的部分。我已经发布了导致错误发生的错误部分。我没有使用Laravel的Validator类,所以这个过程对我不起作用。我已经阅读了Laravel文档并使用了它们,但没有得到预期的解决方案。请回顾我在上面发布的尝试。@DixonChaudhary在您的案例中,Validator::make($data,
可以替换为$this->validate($request,
),但是您确实需要规则对象,并且验证规则也可以定义为数组
,而不是由
分隔的字符串
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
public function update(Request $request, int $employee_id) {
$this->validate ( $request, [
'first_name' => "required|max:220|regex:/[a-z]/",
'middle_name' => "max:120",
'last_name' => "required|max:220|regex:/[a-z]/",
'email' => "required|unique:employees,email,".$employee_id.',employee_id|regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/',
'home_phone' => "unique:employees,home_phone,$employee_id,employee_id|numeric",
'mobile' => "required|unique:employees,mobile,$employee_id,employee_id|numeric",
'job_id' => 'required',
'department_id' => 'required',
'group_id' => 'required',
'node' => 'required',
'branch' => 'required',
'username' => "required|unique:employees,username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
'exchange_username' => "required|unique:employees,exchange_username,".$employee_id.',employee_id|regex:/[A-Za-z0-9][.][A-Za-z0-9]/',
'extension' => "required|unique:employees,mobile,$employee_id,employee_id|numeric|regex:/[0-9]{4}/",
] );
Employee::where ('employee_id', $employee_id )->update ( $request->only ( [
'first_name',
'middle_name',
'last_name',
'email',
'address',
'home_phone',
'mobile',
'job_id',
'department_id',
'group_id',
'branch',
'node',
'name',
'username',
'type',
'exchange_username',
'toggle_ivr_access',
'extension',
'attributed_team',
'cable_team_id',
'disable',
] ) );
Session::flash ( 'message', 'The Employee is Successfully Updated.' );
return redirect ()->route ( 'employees.index' );
}