Laravel任务注册表单报错:General error:1364字段无默认值
问题排查与解决
核心原因
这种情况大概率是模型的$fillable属性未包含对应字段,导致Laravel的批量赋值机制自动过滤了这些字段,数据库接收到的字段值为null,触发非空约束报错。
具体解决步骤
检查模型批量赋值白名单
打开任务模型文件(如Task.php),确保$fillable数组包含Type和Priority_id字段,注意字段名要和数据库表完全一致(大小写敏感):class Task extends Model { protected $fillable = [ // 其他业务字段... 'Type', 'Priority_id', ]; }确认批量赋值的使用方式
检查service或controller中的代码,确保使用批量赋值方法创建/更新模型:// 方式1:直接使用create方法 $task = Task::create($request->all()); // 方式2:fill结合save $task = new Task(); $task->fill($request->all())->save();避免手动赋值时遗漏字段,或误用非批量赋值方式导致字段未被设置。
统一字段名大小写
若数据库字段为Type(首字母大写),但请求中传递的是type(小写),Laravel不会自动映射。可在控制器中转换字段名:$data = $request->all(); $data['Type'] = $request->input('type'); $task = Task::create($data);验证字段传递有效性
若以上操作仍未解决,可在控制器中验证字段是否正常传递:// 检查字段是否存在及对应值 dd($request->has('type'), $request->input('type'));确认请求确实携带了有效值,同时检查数据库表的
Type和Priority_id字段是否设置了非空约束(若业务允许,可调整为允许null或设置合理默认值)。
内容的提问来源于stack exchange,提问作者mahdi.gh
相关产品推荐
相关产品推荐

