Laravel Validator的独特价值

时间:2014-09-04 10:45:52

标签: laravel laravel-4 validation

我正在尝试验证Customer表中的电子邮件地址。 Customer表中有一个名为Brand的列,其中有效的相同电子邮件地址可以注册到多个品牌,例如:

 Email               Brand
 me@mywebsite.com    firstsite.com
 me@mywebsite.com    secondsite.com

验证电子邮件地址时,我需要检查电子邮件在当前品牌的Customer表中是唯一的。目前我的验证规则如下所示

 $rules = array('email' => 'required|email|unique:Customer,Email');

然而,品牌必须出现在那里,有人说电子邮件必须是当前品牌的客户所独有的

任何帮助非常感谢

3 个答案:

答案 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)或您找到的任何其他来源。