You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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');
}

关键说明

  1. 多字段唯一验证:通过Rule::unique结合闭包查询,实现检查customers表中phone或phone2字段是否已存在当前提交的手机号。
  2. 手机号不重复验证:给customer_phone2添加different:customer_phone规则,确保两个手机号字段内容不同。
  3. 修正了原代码中$mesages的拼写错误(应为$messages)。

内容的提问来源于stack exchange,提问作者Yehia Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:06:54