Laravel 5.8新增user表字段后提交表单报usertype无默认值错误
问题排查与解决
我帮你梳理下核心问题:你已经完成了数据表、模型和表单的配置,但提交时仍触发usertype字段无默认值的SQL错误,本质原因是表单提交的usertype字段被表单验证类过滤了,最终没有传入到数据创建逻辑中。
最可能的问题根源:UserRequest过滤了usertype字段
Laravel的表单请求类(也就是你代码里的UserRequest)有一个安全机制:只会保留在rules()方法中定义过的字段,未被定义的字段会被自动过滤。哪怕你在表单里提交了usertype,如果它没出现在验证规则里,$request->all()就不会包含这个字段,自然也就无法写入数据库,触发了非空字段的SQL错误。
解决步骤
1. 更新UserRequest的验证规则
打开你的UserRequest.php文件,在rules()方法里添加usertype的验证规则,示例如下:
public function rules() { return [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8|confirmed', // 新增usertype的验证规则,可根据业务需求调整 'usertype' => 'required|string|in:a' // 和你表单隐藏字段的value值对应 ]; }
如果不需要严格验证,只是想让字段通过过滤,也可以用宽松规则,比如'usertype' => 'string'。
2. 验证请求内容(可选排查)
你可以在store方法里临时打印请求数据,确认usertype是否被正确传递:
public function store(UserRequest $request, User $model) { dd($request->all()); // 查看输出结果里是否包含usertype字段 // 原有的用户创建代码... }
如果输出里没有usertype,那肯定是表单请求过滤了它,按第一步修改即可。
3. 额外排查项
- 确认表单隐藏字段的
name属性拼写正确(你代码里是name="usertype",和模型$fillable一致,这部分没问题)。 - 若怀疑缓存干扰,可执行以下命令清除缓存:
php artisan cache:clear php artisan config:clear
内容的提问来源于stack exchange,提问作者Nipun Tharuksha
相关产品推荐
相关产品推荐

