SQLSTATE[HY000]:1364错误求助:file_material字段无默认值问题
问题解答:SQLSTATE[HY000]: General error: 1364 Field 'file_material' doesn't have a default value
触发的错误
SQLSTATE[HY000]: General error: 1364 Field 'file_material' doesn't have a default value
涉及代码
SubjectDetail模型代码
protected $primaryKey = 'id_sub_detail'; protected $table = 'subject_details'; protected $fillable = [ 'id_sub_detail', 'id_subject', 'start_date', 'time', 'title', 'sub_topics', 'room', 'file_material', ];
可行的数据保存方法
public function UploadSubjectDetail(Request $request){ $addSubjectDetail= new SubjectDetail(); $addSubjectDetail->id_subject = $request->input('id_subject'); $addSubjectDetail->start_date = $request->input('start_date'); $addSubjectDetail->time = $request->input('time'); $addSubjectDetail->title = $request->input('title'); $addSubjectDetail->sub_topics = $request->input('sub_topics'); $addSubjectDetail->room = $request->input('room'); if ($request->file('file_material')) { $file = $request->file('file_material'); $filename = date('YmdHi').$file->getClientOriginalName(); $file->move(public_path('upload/material/'), $filename); $addSubjectDetail['file_material'] = $filename; } $addSubjectDetail->save(); return redirect()->back(); }
错误原因
- 数据库字段约束问题:从你的XAMPP MySQL截图可知,
file_material字段被设置为NOT NULL且未配置默认值。当你未上传文件时,触发错误的代码没有给该字段赋值,保存时字段为空,违反了数据库的非空约束,从而抛出1364错误。 - 当前保存逻辑的问题:你提到是在给
user_id赋值当前用户时出错,说明当前使用的保存逻辑和上面的可行方法不一致——大概率是用了create()这类批量赋值方式,或者未处理file_material为空的场景,导致该字段未被赋值就执行了保存操作。
解决办法
- 修改数据库字段配置:将
file_material字段改为允许NULL,或者给它设置空字符串作为默认值。 - 完善代码逻辑:保存数据时,无论是否上传文件,都给
file_material明确赋值:
如果使用批量赋值(如// 替换原有的if判断逻辑 $filename = ''; if ($request->file('file_material')) { $file = $request->file('file_material'); $filename = date('YmdHi').$file->getClientOriginalName(); $file->move(public_path('upload/material/'), $filename); } $addSubjectDetail->file_material = $filename;SubjectDetail::create($request->all())),可在模型中设置默认值:// 在SubjectDetail模型中添加 protected $attributes = [ 'file_material' => '', ];
内容的提问来源于stack exchange,提问作者Anis Indah
相关产品推荐
相关产品推荐

