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
相关产品推荐
相关产品推荐

