問題描述
如何在 2 個字段上設置唯一的驗證規則?
How can I have a unique validation rule on 2 fields?
一個.應用程序不應允許兩個人具有相同的名字和姓氏.
a. The application should not allow two people to have the same identical first name and last name.
允許用戶只填寫名字或只填寫姓氏.因為用戶可能只有其中之一.
It is allowed that the users fills in only a first name or only a last name. Because the user may have only one of them.
B.但是,如果用戶只輸入名字 (Glen),則表中的其他人不應具有相同的名稱(名字 = 'Glen' 且姓氏 = null).另一個格倫史密斯"還可以.
b. But if the user enters only a first name (Glen), no other person in the table should have the same (first name = 'Glen' and last name = null). another 'Glen Smith' ok.
我嘗試了以下規則.當兩個字段(名字和姓氏)都不為空時,它工作得很好:
I tried the following rule. It works great when both fields (first and last name) are not null:
'firstName' => 'unique:people,firstName,NULL,id,lastName,' . $request->lastName
此規則在 b 上失敗.當只有一個字段時.
This rule fails on b. when only one field is present.
有什么提示嗎?
推薦答案
內置的 unique
驗證器不會真正支持您嘗試執行的操作.它的目的是確保單個有效值在數據庫中是唯一的,而不是兩個值的組合.但是,您可以創建一個自定義驗證器:
The built in unique
validator wouldn't really support what you're trying to do. It's purpose is to ensure that a single valid is unique in the database, rather than a composite of two values. However, you can create a custom validator:
Validator::extend('uniqueFirstAndLastName', function ($attribute, $value, $parameters, $validator) {
$count = DB::table('people')->where('firstName', $value)
->where('lastName', $parameters[0])
->count();
return $count === 0;
});
然后您可以通過以下方式訪問此新規則:
You could then access this new rule with:
'firstName' => "uniqueFirstAndLastName:{$request->lastName}"
您可能會發現您可能需要稍微調整您的數據庫查詢,因為它未經測試.
You'll probably find you might need to tweak your database query a little bit as it's untested.
這篇關于Laravel 表單驗證唯一使用 2 個字段的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!