Laravel 验证 - 检查有效的重复电子邮件

Posted

技术标签:

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

表结构:

users: id  - email - active

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

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于Laravel 验证 - 检查有效的重复电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中验证电子邮件地址是不是是有效的 PayPal 电子邮件地址

Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证

Laravel Tymon\JWT Auth:在身份验证之前检查未完成的有效令牌?

使用 Laravel 中的验证器检查两个表中两列的唯一性

想修改 laravel 默认登录来检查用户是不是被验证

iOS中电子邮件地址的正则表达式验证并检查空白条目[重复]