Laravel 仅当值不为空时才验证字段的唯一性
Laravel validating the uniqueness of a field only when the value is not null
我有一个可以为空的 system_name 字段,如果输入不为空,我想验证它的唯一性。
根据别人给出的推荐方案,可以
$this->validate($request, [
'system_name' => 'nullable|unique:systems'
]);
为什么这个解决方案有效?鉴于当为 system_name 输入空值时,它不应该通过可空规则但不符合唯一规则,因为空值不是唯一的,因为它以前被使用过?
请问用''和[]封装规则有什么区别?如对用户名和电子邮件所做的验证所示
public function rules()
{
return [
'username' => 'required|min:8',
'email' => ['required', Rule::unique('users')]
];
}
nullable
规则的 documentation 简单地说明:
The field under validation may be null
.
它没有说明的是,如果该字段是 null
,则后续验证将被忽略。因此,在您的情况下,不会调用 unique:systems
规则。从逻辑的角度来看,这是有道理的,因为 nullable
column/index 不应将 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-usage
https://laravel.com/docs/6.x/validation#basic-usage
6.x
版本包括:
Alternatively, validation rules may be specified as arrays of rules instead of a single |
delimited string
如今,两种语法都可以接受,主要是为了支持旧版本的向后兼容性和语法偏好。我喜欢 |
分隔字符串,但 []
方法更灵活一些(因为您可以使用文档中某些示例中所示的规则和函数。)
1 通常;这可能不适用于所有数据库类型,但根据我的经验,情况确实如此。
我有一个可以为空的 system_name 字段,如果输入不为空,我想验证它的唯一性。
根据别人给出的推荐方案,可以
$this->validate($request, [
'system_name' => 'nullable|unique:systems'
]);
为什么这个解决方案有效?鉴于当为 system_name 输入空值时,它不应该通过可空规则但不符合唯一规则,因为空值不是唯一的,因为它以前被使用过?
请问用''和[]封装规则有什么区别?如对用户名和电子邮件所做的验证所示
public function rules()
{
return [
'username' => 'required|min:8',
'email' => ['required', Rule::unique('users')]
];
}
nullable
规则的 documentation 简单地说明:
The field under validation may be
null
.
它没有说明的是,如果该字段是 null
,则后续验证将被忽略。因此,在您的情况下,不会调用 unique:systems
规则。从逻辑的角度来看,这是有道理的,因为 nullable
column/index 不应将 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-usage https://laravel.com/docs/6.x/validation#basic-usage
6.x
版本包括:
Alternatively, validation rules may be specified as arrays of rules instead of a single
|
delimited string
如今,两种语法都可以接受,主要是为了支持旧版本的向后兼容性和语法偏好。我喜欢 |
分隔字符串,但 []
方法更灵活一些(因为您可以使用文档中某些示例中所示的规则和函数。)
1 通常;这可能不适用于所有数据库类型,但根据我的经验,情况确实如此。