Laravel 7中如何实现正确的客户表单手机号验证?
Laravel客户表单验证规则修正
需求回顾
需要实现两个核心验证规则:
- 验证
customer_phone和customer_phone2是否已存在于customers表的phone或phone2字段中 - 禁止
customer_phone与customer_phone2填写相同内容
原代码问题
原代码的unique规则写法错误,无法实现“检查两个数据库字段”的逻辑;同时缺少两个手机号不重复的验证规则。
修正后的完整代码
use Illuminate\Validation\Rule; if($request->customer_id == null) { unset($rules['customer_id']); $rules['customer_name'] = 'required'; $rules['customer_address'] = 'required'; $rules['customer_phone'] = [ 'required', 'max:11', // 验证手机号是否存在于phone或phone2字段 Rule::unique('customers')->where(function ($query) use ($request) { return $query->where('phone', $request->customer_phone) ->orWhere('phone2', $request->customer_phone); }) ]; $rules['customer_phone2'] = [ 'max:11', // 验证手机号是否存在于phone或phone2字段 Rule::unique('customers')->where(function ($query) use ($request) { return $query->where('phone', $request->customer_phone2) ->orWhere('phone2', $request->customer_phone2); }), // 验证两个手机号不相同 'different:customer_phone' ]; $rules['customer_type'] = 'in:regular,special,jomla'; $messages['customer_name.required'] = translate('the name is required'); $messages['customer_address.required'] = translate('the address is required'); $messages['customer_phone.required'] = translate('the phone is required'); $messages['customer_phone.max'] = translate('the phone number is not correct'); $messages['customer_phone.unique'] = translate('the phone number is used'); $messages['customer_phone2.max'] = translate('the phone number is not correct'); $messages['customer_phone2.unique'] = translate('the phone number is used'); $messages['customer_phone2.different'] = translate('the two phone numbers cannot be the same'); }
关键说明
- 多字段唯一验证:通过
Rule::unique结合闭包查询,实现检查customers表中phone或phone2字段是否已存在当前提交的手机号。 - 手机号不重复验证:给
customer_phone2添加different:customer_phone规则,确保两个手机号字段内容不同。 - 修正了原代码中
$mesages的拼写错误(应为$messages)。
内容的提问来源于stack exchange,提问作者Yehia Ahmed
相关产品推荐
相关产品推荐

