laravel如何使唯一规则排除空白或null

时间:2015-06-11 21:54:32

标签: laravel

我有一个用户模型,需要有唯一的电子邮件地址,但我也想让它们留空,以防用户没有电子邮件...我在docs看到有办法制作唯一的规则和id的例外...但我不知道如何使这个允许null或空白,但如果不是,则唯一。对不起似乎这很简单,但我想不出答案。

   public static $adminrules = 
        'email' => 'email|unique:users,email,null,id,email,NOT_EMPTY'                             
    );   

修改使用不带required的规则可能就足够了,因为空格或null会在这些情况下通过验证。我可能有一个相关的错误,所以我不能添加超过1个空白电子邮件,所以我无法验证这一点。

   public static $adminrules = 
        'email' => 'email|unique:users'                             
    ); 

3 个答案:

答案 0 :(得分:0)

你应该试试这个:

$v->sometimes('email', 'email|unique:users,email', function($input)
{
    return !empty($input->email);
});

$ v是你的验证器对象,你基本上说如果电子邮件字段不为空,它也应该是唯一的(不应该是在电子邮件列中具有此值的用户表记录)。

答案 1 :(得分:0)

在您的 Requests/UserRequest 中,您会拥有类似的内容

public function rules()
{
    return [
        'email' => [
            'nullable',Rule::unique((new User)->getTable())->ignore($this->route()->user->id ?? null)
         ]
    ];
}

nullable 的用法是允许该字段为空。另一部分是检查电子邮件在 User 模型表中是否唯一。

如果您想验证字段是否唯一

  • 在两个字段之间请refer to this answer

  • 在另一个表中,然后将以下内容添加到您的规则中

'exists:'.(new ModelName)->getTable().',id'

答案 2 :(得分:0)

我试过了。在“有时”之前添加“可为空”。

 $validator = Validator::make($request->all(), [
        'email' => 'nullable|sometimes|unique:users',
    ]);