我有一个可以为null的system_name字段,如果输入不为null,我想验证该字段的唯一性。
根据其他人给出的推荐解决方案,它可以只是
$this->validate($request, [
'system_name' => 'nullable|unique:systems'
]);
为什么这个解决方案有效?考虑到当为system_name输入null值时,它是否应该通过可为null的规则,但不通过唯一规则,因为null值不是唯一的,因为它以前曾被使用过?
我还可以询问用"与[]封装规则之间的区别吗?如在用户名和电子邮件上进行的验证所示
public function rules()
{
return [
'username' => 'required|min:8',
'email' => ['required', Rule::unique('users')]
];
}
nullable
规则的文档简单地说明:
正在验证的字段可能是
null
。
它没有声明,如果字段是null
,则忽略后续验证。因此,在您的情况下,不会调用unique:systems
规则。从逻辑角度来看,这是有道理的,因为nullable
列/索引不应将null
视为唯一值1
此外,'nullable|unique:systems'
和['nullable', 'unique:systems']
(或其他变体(之间的区别是:实际上什么都没有。在Laravel的旧版本中,'rule1|rule2'
语法是唯一可用的方法。比较Laravel 5.4和Laravel 6.x:的文档
https://laravel.com/docs/5.4/validation#basic-用法https://laravel.com/docs/6.x/validation#basic-使用
6.x
版本包括:
或者,验证规则可以指定为规则数组,而不是单个由
|
分隔的字符串
如今,这两种语法都是可以接受的,主要是为了支持旧版本的向后兼容性和语法偏好。我喜欢|
分隔的字符串,但[]
方法更灵活一些(因为您可以使用文档中的一些示例中所示的规则和函数(
1通常;这可能不适用于所有DB类型,但根据我的经验,情况就是这样。