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

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();
}

错误原因

  1. 数据库字段约束问题:从你的XAMPP MySQL截图可知,file_material字段被设置为NOT NULL且未配置默认值。当你未上传文件时,触发错误的代码没有给该字段赋值,保存时字段为空,违反了数据库的非空约束,从而抛出1364错误。
  2. 当前保存逻辑的问题:你提到是在给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:05:23