【问题标题】:Laravel validation: Unique exception not functioning for one userLaravel 验证:唯一的异常不适用于一个用户
【发布时间】:2018-01-07 03:57:02
【问题描述】:

我的验证规则是...

$rules = [];

    foreach($this->request->get('email') as $key=>$value){
        $rules['email.'.$key] = 'required|regex:/[a-zA-Z]+@[a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,'.$this->request->get('admin_id')[$key].',admin_id';
    }

基本上,规则是它是必需的,正则表达式通过,并且电子邮件尚未使用,除非该特定行正在使用电子邮件。但是,我在运行表单时收到此错误消息:

The email.0 has already been taken.

要清楚,这个表单有 8 个不同的用户,只有第一个给我这个问题。我对规则进行了 dd() 以查看正在应用的验证规则之间有什么不同,但我没有看到任何不同。

"email.0" => "required|regex:/[a-zA-Z]+@[a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,0,admin_id"

"email.1" => "required|regex:/[a-zA-Z]+@[a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,1,admin_id"

"email.2" => "required|regex:/[a-zA-Z]+@[a-zA-Z]+(\.[a-zA-Z]+)+/|unique:admins,admin_email,2,admin_id"

如果我更新 email.0,我不会遇到这个问题。无论我是否更新 email.0,我也不会在任何其他行中遇到这个问题。我无法删除此用户,因为存在外键约束。非常清楚的是,这个特定管理员的admin_id0。或者,换句话说,这就是表格查找此特定条目的方式

admin_id|admin_email
--------+------------
   0    |  ab@c.d

编辑:Laravel 在哪里构建和运行实际查询?如果我可以在数据库日志上执行 dd(),我可能会找到我的问题所在(请参阅实际的原始查询)。

我显然在这里遗漏了一些东西 - 任何帮助将不胜感激!

【问题讨论】:

  • 能否将dd(request()) 的输出粘贴到验证和验证码本身之前?

标签: laravel validation


【解决方案1】:

唯一的规则不应该是这样的:

unique:admins,admin_email,0,admin_id

0 是指admin_id 列的值,唯一规则应忽略该值。

因此,如果您有表 admins 为:

admin_id | admin_email
---------+-------------
1        | a@b.c
2        | b@c.d
3        | c@d.e

你正在更新admin_email == b@c.d的位置

您的规则应如下所示

unique:admins,admin_email,2,admin_id

【讨论】:

  • 我不知道你想在这里告诉我什么。我知道异常是如何工作的——我已经阅读了文档。该admin_emailadmin_id 0。
猜你喜欢
  • 2022-01-09
  • 2021-03-08
  • 2017-11-02
  • 2019-09-19
  • 2019-05-08
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多