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

Laravel控制器中如何实现数据库字段唯一性校验(用户名重复校验)

修复方案

核心错误原因

你控制器里的用户名唯一性校验规则语法错误,unique:TempAccount,AccountName,末尾多了一个多余的逗号,Laravel解析规则时会把第三个空参数识别为要排除的主键ID,触发语法报错。

完整修复步骤

1. 修正控制器校验逻辑

同时补充密码校验规则,且对密码做哈希处理避免明文存储,修正后代码如下:

// 控制器顶部先引入哈希门面
use Illuminate\Support\Facades\Hash;

public function store_account_Registration(Request $request)
{
    // 去掉unique规则末尾多余逗号,补充密码一致性校验
    $validated = $request->validate([
        'username' => 'required|min:6|unique:TempAccount,AccountName',
        'password' => 'required|min:6',
        'password_two' => 'required|same:password'
    ]);

    $current_date = date('Y-m-d H:i:s');
    $query = DB::table('TempAccount')->insert([
        'RegID'=>$request->input('uniqID3'),
        'FullName'=>$request->input('pfulname3'),
        'AccountName'=>$request->input('username'),
        // 密码哈希后再存储,避免明文泄露
        'Pass'=>Hash::make($request->input('password')),
        'created_at'=> $current_date,
        'updated_at'=> $current_date,
    ]);
    if($query){
        return back()->with('success', '数据已成功提交');
    }
    else
    {
        return back()->with('fail', '操作出错,请重试');
    }
}

2. 修正blade模板的成功提示样式

把原来成功提示的alert-danger样式类改成alert-success,避免样式逻辑混乱:

@if(Session::get('success'))
 <div class="alert alert-success">
     {{ Session::get('success')}}
 </div>
@endif

修复后即可正常触发用户名唯一性校验:如果输入的用户名已经存在于TempAccount表的AccountName字段,会自动返回表单页面,在用户名输入框下方显示重复提示。


内容的提问来源于stack exchange,提问作者Jeffrey Panaguiton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:27:03