如何在laravel中进行多字段唯一验证?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在laravel中进行多字段唯一验证?相关的知识,希望对你有一定的参考价值。
所有其他验证工作正常,但我必须使用国家/地区代码验证手机号码是唯一的,并生成自定义验证消息。请帮帮我。
$validator = Validator::make($request->all(), [
'first_name'=> 'required|min:2|max:30',
'last_name' => 'required|min:2|max:30',
'email' => 'required|unique:users,email,'.$userId,
'mobile' => 'required|numeric|min:10|unique:users,mobile,'.$userId,
]);
if ($validator->fails()){
$response['status'] = "false";
$response['message'] = $this->validationHandle($validator->messages());
$response['data'] = [];
$this->response($response);
}else{
//true function response
}
答案
您可以为此方案创建自己的验证器:
Validator::extend('custom_unique',
function ($attribute, $value, $parameters, $validator) {
// Get table name from first parameter
$table = array_shift($parameters);
// Build the query
$query = DB::table($table);
// Add the field conditions
foreach ($parameters as $i => $field) {
$query->where($field, $validator->getData()[$field]);
}
// Validation result will be false if any rows match the combination
return ($query->count() == 0);
});
你可以使用它:
//table_name - users
//fields - user_id,mobile_no,etc..
'mobile' => 'required|numeric|min:10|custom_unique:users,user_id,mobile_no'...
另一答案
首先在控制器顶部包含Rule类,然后根据移动设备更改验证。
use IlluminateValidationRule;
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|unique:users',
'mobile' => ["required","numeric","min:7",Rule::unique('users')->where(function ($query)use ($request) {
return $query->where('country_id',"=", $request->country_id);
})],
'country_id' => 'required|numeric',
'password' => 'required|min:8|max:15',
'account_type' => 'required',
'device_type' => 'required',
'device_token' => 'required',
]);
希望你能得到正确答案。 (y)的
以上是关于如何在laravel中进行多字段唯一验证?的主要内容,如果未能解决你的问题,请参考以下文章