【问题标题】:Laravel Forcing A Unique Rule To Ignore A Given ID not workingLaravel 强制使用唯一规则来忽略给定 ID 不起作用
【发布时间】:2018-09-16 06:25:29
【问题描述】:

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

SQLSTATE[23000]:违反完整性约束:1062 重复条目 'user@updated.com' 键 'users_email_unique' (SQL:更新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');
    }

数据库:

【问题讨论】:

  • users 表的主键是什么?
  • @Kyslik 主键是id列。
  • 我认为代码是正确的,您在数据库中只有两个条目,而您正试图用第二个的电子邮件更改第一个。由于违反完整性约束:1062 键“users_email_unique”的重复条目“user@updated.com”(SQL:更新
  • @Kyslik 你是对的。我没有传递 ID,而是更新了当前登录的用户。如果你设置一个答案,我会接受。
  • 把它交给@Matthias S。祝你好运! :)

标签: php laravel validation laravel-5 validationrules


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是有意的,这应该是评论,而不是答案。
      猜你喜欢
      • 2016-12-22
      • 2019-07-20
      • 2019-01-09
      • 2020-09-13
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多