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

Laravel 10注册重复手机号触发SQL唯一约束错误排查求助

Laravel 10 注册重复手机号触发SQL约束错误的解决方法

问题现象

首次注册功能正常,但使用已存在的手机号再次提交注册请求时,抛出数据库完整性约束错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '123456789' for key 'users.users_phone_unique'

问题原因

数据库迁移文件中已为phone字段添加了unique唯一约束,但注册控制器的表单验证规则未包含手机号唯一性校验。这导致请求跳过应用层验证,直接触发数据库的唯一约束,进而抛出SQL错误。

修复步骤

修改App\Http\Controllers\Auth\RegisterController中的validator方法,为phone字段添加unique:users验证规则:

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'min:10'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
        'phone' => ['required', 'string', 'max:11', 'unique:users'],
    ]);
}

可选优化:自定义错误提示

如果需要给用户更友好的中文提示,可以在验证规则中添加自定义消息:

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'min:10'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
        'phone' => ['required', 'string', 'max:11', 'unique:users'],
    ], [
        'phone.unique' => '该手机号已被注册,请更换其他手机号',
    ]);
}

验证确认

修改完成后,再次使用已注册的手机号提交请求,Laravel会在应用层直接返回验证错误,不再触发数据库SQL异常,用户体验更友好。

内容的提问来源于stack exchange,提问作者dariush nasr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:28:23