【问题标题】:Laravel validation for row uniqueness行唯一性的 Laravel 验证
【发布时间】:2022-12-05 00:43:49
【问题描述】:

在 Laravel 9 中工作,我在 FormRequests 中进行验证。

我有一个 email_updates 表。

我有 3 列,emailproduct_uuidaffiliate_uuid,我希望强制执行独特性。一封电子邮件可以注册多个产品,甚至可以注册来自不同附属公司的同一产品。

我的数据有一个缩短的场景。前 4 行有效。

+--------+--------------+----------------+------------+
| email  | product_uuid | affiliate_uuid | created_at |
+--------+--------------+----------------+------------+
| a@a.co | 3ed          | 21c            | 2022-01-01 |
| b@b.co | 46a          | 21c            | 2022-01-01 |
| a@a.co | 46a          | 21c            | 2022-01-01 |
| a@a.co | 46a          | 899            | 2022-01-01 |
+--------+--------------+----------------+------------+

但是我需要验证器拒绝这一行,因为 a@a.co3ed21c 的三重奏之前已经被使用过

+--------+--------------+----------------+------------+
| a@a.co | 3ed          | 21c            | 2022-01-01 |
+--------+--------------+----------------+------------+

这是我到目前为止编写的验证程序,但它没有捕获我的重复行

public function rules()
    {
        return [
            'email' => [
                'required|email:rfc,dns|min:5|max:75',
                Rule::unique("email")->where(function ($query) {
                    $query->where("product_uuid", $this->product_uuid)
                        ->where("affiliate_uuid", $this->affiliate_uuid);
                })
            ],
        ];
    }

Laravel 文档似乎没有解决我的情况 https://laravel.com/docs/9.x/validation#rule-unique

我确信这很简单,但我在这里错过了什么?

【问题讨论】:

    标签: validation laravel-9 laravel-formrequest


    【解决方案1】:

    要强制行唯一性,您可以在 FormRequest 的验证规则中使用唯一规则。 unique 规则将表名和列名作为其参数。在您的情况下,您希望确保电子邮件、product_uuid 和 affiliate_uuid 的组合是唯一的,因此您可以将这些列指定为唯一规则的第二个和第三个参数,如下所示:

    public function rules()
    {
        return [
            'email' => [
                'required|email:rfc,dns|min:5|max:75',
                Rule::unique('email_updates', 'email', 'product_uuid', 'affiliate_uuid')
            ],
        ];
    }
    

    这将确保电子邮件、product_uuid 和 affiliate_uuid 的组合在 email_updates 表中是唯一的。

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2022-01-12
      • 2015-07-11
      • 2017-10-11
      相关资源
      最近更新 更多