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

Laravel Forcing A Unique Rule To Ignore A Given ID not working

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

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user@updated.com' for key 'users_email_unique' (SQL: update users set name = Name, email = user@updated.com, updated_at = 2018-04-06 10:01:27 where id = 1)

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

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');
    }

数据库:

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

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

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

进行更新