Laravel注册表单无法向数据库插入新增的proffession字段值
解决Laravel注册时无法插入自定义profession字段的问题
我来帮你搞定这个问题!你遇到的情况是Laravel默认的注册流程没有包含你新增的profession字段,所以需要手动调整几个关键地方:
1. 配置User模型的批量赋值白名单
Laravel通过模型的$fillable属性来控制哪些字段可以被批量赋值(比如通过User::create()方法插入数据),你需要把profession添加进去:
// app/User.php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; /** * 可以批量赋值的属性 * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'profession', // 新增profession字段 ]; // ... 其他模型代码保持不变 }
2. 更新注册控制器的验证规则
打开app/Http/Controllers/Auth/RegisterController.php,修改validator方法,为profession添加对应的验证规则(根据你的需求调整,比如是否必填、长度限制等):
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'profession' => ['required', 'string', 'max:190'], // 新增profession的验证规则 ]); }
如果profession是可选字段,把required去掉即可。
3. 修改注册控制器的create方法
同样在RegisterController.php里,找到create方法,把profession字段加入到创建用户的数组中:
use Illuminate\Support\Facades\Hash; protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'profession' => $data['profession'], // 新增这一行,把表单提交的profession值存入数据库 ]); }
4. 最后检查前端表单的name属性
确保你在resources/views/auth/register.blade.php中添加的输入框name属性是profession,这样表单提交时才能把值传到后端:
<div class="form-group row"> <label for="profession" class="col-md-4 col-form-label text-md-right">{{ __('Profession') }}</label> <div class="col-md-6"> <input id="profession" type="text" class="form-control @error('profession') is-invalid @enderror" name="profession" value="{{ old('profession') }}" required autocomplete="profession"> @error('profession') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div>
做完这几步后,再测试注册流程,profession字段的值应该就能正常存入MySQL的users表了!
内容的提问来源于stack exchange,提问作者Webdev
相关产品推荐
相关产品推荐

