我有员工,在数据库中有(自动增量)唯一ID(非常简单:))但我想检查其他字段的唯一性,这将是他们的employee_number ..
在创建新员工时,这很简单,因为我只是打电话:
$this->validate($request, [
'employee_number' => 'required|unique:employees'
]);
但是,如何在编辑现有员工时执行此操作?我想检查一下(如果“编辑”的employee_number对于 OTHER 用户来说是唯一的...这意味着我需要将此查询重写为laravel验证表单
employee_number NOT IN (SELECT employee_number
FROM employees
WHERE id = *edited_user_id*)
我试图这样做
$this->validate($request, [
'employee_number' => 'required|unique:employees,id,'.$input['employee_id']
]);
想象一下,表“员工”中有记录
id | name | employee_number
-----------------------------
1 | Peter | 0001
2 | Paul | 0002
3 | Frank | 0003
当我尝试更改Frank的数据时 - >没关系..即使我将员工编号更改为一个独特的员工编号,也可以。
但是,当我为Frank的帐户插入现有的帐户时,即0001,它没有给我一个正确的错误消息(来自验证器),该员工编号已被采用..但不是那样,它将我重定向到错误页面< / p>
Whoops, looks like something went wrong.
QueryException in Connection.php line 669:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0001' for key 'employees_employee_number' (SQL: *here comes the wrong sql query*)
您知道如何在表单上方引发正确的错误栏,例如当我尝试插入新员工并尝试插入现有ID时?
答案 0 :(得分:3)
你在'required|unique:employees,id,'.$input['employee_id']
犯了一个小错误。
现在,您正在查看employee_number
字段employees
表中的输入id
是否唯一。
将该行更改为:
'required|unique:employees,employee_number,'.$input['employee_id']
你很高兴!
来自Lavarel docs:unique:table,column,except,idColumn
。
答案 1 :(得分:1)
如果Validator失败,我收集了错误消息,如图所示
$rules = ['employee_number' =>
'required|unique:employees,employee_number,'.$input['employee_id']]
$validator = \Validator::make($data = \Input::all(), $rules);
if ($validator->fails()) {
return [
return [
"status" => "fail",
"errors" => $validator->getMessageBag()->toArray()
];
];
}
现在收集您发送请求的响应,作为回应,您将获得一个关联的错误消息数组,您可以根据自己的用途使用它。