我有一個可以為空的 system_name 欄位,如果輸入不為空,我想驗證其唯一性。
根據其他人給出的推薦解決方案,它可以是
$this->validate($request, [
'system_name' => 'nullable|unique:systems'
]);
為什么這個解決方案有效?鑒于當為 system_name 輸入空值時,它是否應該通過可空規則但不通過唯一規則,因為空值不是唯一的,因為它之前已使用過?
我還可以詢問用 '' vs [ ] 封裝規則有什么區別嗎?如對用戶名和電子郵件的驗證所示
public function rules()
{
return [
'username' => 'required|min:8',
'email' => ['required', Rule::unique('users')]
];
}
uj5u.com熱心網友回復:
該規則的檔案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-usage https://laravel.com/docs/6.x/validation#basic-usage
該6.x版本包括:
或者,可以將驗證規則指定為規則陣列而不是單個
|分隔字串
如今,這兩種語法都是可以接受的,主要是為了支持舊版本以實作向后兼容性和語法偏好。我喜歡|分隔字串,但該[]方法更靈活一些(因為您可以使用檔案中的一些示例中顯示的規則和函式。)
1通常;這可能不適用于所有資料庫型別,但根據我的經驗,情況就是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441320.html
上一篇:如果選中復選框,則需要select或textarea
下一篇:JavaNullPointerCustomValidatorjavax.validation.ConstraintValidator
