我正在尝试验证Customer表中的电子邮件地址。 Customer表中有一个名为Brand的列,其中有效的相同电子邮件地址可以注册到多个品牌,例如:
Email Brand
me@mywebsite.com firstsite.com
me@mywebsite.com secondsite.com
验证电子邮件地址时,我需要检查电子邮件在当前品牌的Customer表中是唯一的。目前我的验证规则如下所示
$rules = array('email' => 'required|email|unique:Customer,Email');
然而,品牌必须出现在那里,有人说电子邮件必须是当前品牌的客户所独有的
任何帮助非常感谢
答案 0 :(得分:1)
您可以使用唯一验证规则的column和value参数向规则添加条件。
'email' => 'required|email|unique:Customer,Email,null,null,column,value'
问题是你需要你的品牌输入才能创建这样的规则:
$rules['email'] = 'required|email|unique:Customer,Email,null,null,Brand,' . Input::get('Brand');
此规则将检查电子邮件在品牌具有给定值的位置是否唯一。
更多信息: http://laravel.com/docs/validation#rule-unique
还有一个可以帮助您的软件包: https://github.com/felixkiss/uniquewith-validator
答案 1 :(得分:0)
$ rules = array('email'=>'required | email | unique:Customer,Email');如果电子邮件已经存在,这将查询您的模型以查找输入的电子邮件,然后会引发错误消息。所以这不适用于您的应用设计流程。您必须运行SQL查询以查明当前品牌是否存在电子邮件,如果是,则返回错误消息,如果不保存数据。类似的东西
答案 2 :(得分:0)
我会去编写自己的自定义验证规则。自定义验证规则将是更常见的解决方案,您可以将其命名为最适合您的解决方案。它可以使用 Validator :: extend()和一个闭包创建,如下所示:
Validator::extend('awesome', function($field, $value, $params)
{
return $value == 'awesome';
});
或通过验证器类。对此主题进行研究,可能是here (scroll to custom rules section)或您找到的任何其他来源。