我有一个用户模型,需要有唯一的电子邮件地址,但我也想让它们留空,以防用户没有电子邮件...我在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'
);
答案 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',
]);