Laravel验证器 - 完整性约束违规

时间:2016-04-07 03:37:43

标签: validation laravel

我有员工,在数据库中有(自动增量)唯一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时?

2 个答案:

答案 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()
        ];
                ];
            }

现在收集您发送请求的响应,作为回应,您将获得一个关联的错误消息数组,您可以根据自己的用途使用它。