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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:04:04