【问题标题】:Laravel Validation - Check Active Duplicate EmailsLaravel 验证 - 检查有效的重复电子邮件
【发布时间】:2019-04-18 19:47:39
【问题描述】:

表结构:

users: id  - email - active

我只想在active 为 0 时检查重复的电子邮件。

对于所有电子邮件,我都会这样做:

'email' => 'required|unique:users|email',

是否可以在验证中定义条件?

【问题讨论】:

  • 我敢打赌,我的谷歌搜索花费的时间比你提出问题的时间要少:)
  • @RiggsFolly 我自己在这里写了那个页面的答案。我想要更多。请阅读问题。
  • 您可以将验证规则放入数组并动态添加到validation方法中。添加 if user which you are trying to edit is active 之类的条件,然后推送 email => 'required|unique:users|email' 规则。

标签: php laravel laravel-5 laravel-validation


【解决方案1】:

unique 规则有以下参数:

table[,column[,ignore value[,ignore column[,where column,where value]...]]]

所以这样的事情可以在没有闭包或其他自定义规则的开销的情况下工作。 (我使用数组格式是因为它更容易阅读,对 VCS 更友好,而且 Laravel 只是拆分字符串。)

'email' => [
   'required',
   'email',
   'unique:users,email,null,null,active,0',
],

我将忽略列和值设置为null,因为在您的原始问题中没有任何内容被忽略。但是,如果您在更新和创建时都进行此验证,则需要忽略您正在更新的用户的 ID。

【讨论】:

    【解决方案2】:

    如何使用验证器闭包?

    public function store(Request $request)
    {
       $this->validate($request, [
           'email' => [
               'required',
               'email',
               function ($attribute, $value, $fail) {
                   if (Users::whereEmail($value)->whereActive(0)->count() > 0) {
                       $fail($attribute.' is already used.');
                   }
               },
           ]);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2018-04-15
      • 2011-07-16
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多