Laravel强制一个唯一的规则忽略给定的ID不起作用

时间:2018-04-06 09:03:10

标签: php laravel validation laravel-5 validationrules

我试图忽略给定ID的唯一角色,但我不断收到以下错误:

  

SQLSTATE [23000]:完整性约束违规:1062重复条目   ' user@updated.com'对于关键' users_email_unique' (SQL:update users   设置name =姓名,email = user @ updated.com,updated_at =   2018-04-06 10:01:27 id = 1)

在我的UserUpdateRequest课程中,我设置了规则:

public function rules()
    {
        return [
            'email' => 'required|email|unique:users,email,' . $this->route()->parameter('user'),
            'name' => 'required',
        ];
    }

$this->route()->parameter('user')获取当前的型号ID。

我不确定我的规则在哪里做错了,有人有什么想法吗?

以下是我调用更新的地方:

public function update(Requests\UserUpdateRequest $request, $id)
    {
        $result = $this->service->update($request->except(['_token', '_method']));

        if ($result) {
            return back()->with('message', 'Successfully updated');
        }

        return back()->with('message', 'Failed to update');
    }

DB:

enter image description here

3 个答案:

答案 0 :(得分:3)

出现错误的原因是您尝试在数据库中保存重复条目。您可以在索引中看到所有电子邮件都必须是唯一的。 如果您尝试将记录更改为其他人已使用的电子邮件地址,则会收到完整性约束错误消息。

答案 1 :(得分:0)

问题是我没有将用户的ID传递给该函数,因此它更新了当前登录用户的记录,因此它将触发唯一规则。您可以在查询中看到它正在执行WHERE id =1,因为它正在使用Auth::id();进行更新。

答案 2 :(得分:-1)

这是一个SQL错误,你对sql表有一个唯一的约束。可能在您进行迁移时添加了table->string("email")->unique()