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

Laravel报错SQLSTATE[HY000]:1364,job_post_id字段无默认值

问题解决:SQLSTATE[HY000]: General error: 1364 Field 'job_post_id' doesn't have a default value

问题详情

运行dd($id)可正常获取数据,给$applicatesave->job_post_id = $id后调用applicationsave方法时触发数据库错误,错误信息如下:

SQLSTATE[HY000]: General error: 1364 Field 'job_post_id' doesn't have a default value (Connection: mysql, SQL: insert into job_post_questions (question, application_id, type, updated_at, created_at) values (dasdsadas, 10, 2, 2023-04-08 16:56:15, 2023-04-08 16:56:15))

相关业务代码:

public function applicationsave(Request $request, $id)
{
    // dd($id);

    $cv = $request->file('cv'); // Dosya yükleniyor
    $cvName = time() . '_' . $cv->getClientOriginalName(); // Dosya adı oluşturuluyor
    $cv->move(public_path('cv'), $cvName); // Dosya kaydediliyor

    $applicatesave = new applications();
    $applicatesave->name = $request->name;
    $applicatesave->email = $request->email;
    $applicatesave->phone_number = $request->phone_number;
    $applicatesave->city = $request->city;
    $applicatesave->linkedin = $request->linkedin;
    $applicatesave->job_post_id =($id);
    $applicatesave->cv = 'cv/' . $cvName;

    $applicatesave->save();

    foreach($request->question as $key=>$data){
        $question = Job_post_questions::firstOrCreate(
            ['question' =>  $key],
            [
                'application_id' => $applicatesave->id,
                'type' => 2,

                ]
        );

        Answers::create([
            'question_id' => $question->id,
            'answer' => $data,
            'applications_id' => $applicatesave->id
        ]);
    }

    return back();
}

问题原因

错误并非来自applications表的插入,而是job_post_questions表的插入操作:你在Job_post_questions::firstOrCreate方法中,仅为question、application_id、type字段赋值,未传入job_post_id字段的值;而数据库中job_post_questions表的job_post_id字段被设置为非空(NOT NULL)且无默认值,因此插入时触发约束错误。

解决方案

方案1:为job_post_questions插入时补充job_post_id字段值

修改firstOrCreate的第二个参数,添加job_post_id字段,值为方法接收的$id:

$question = Job_post_questions::firstOrCreate(
    ['question' =>  $key],
    [
        'application_id' => $applicatesave->id,
        'type' => 2,
        'job_post_id' => $id // 新增此行,传入job_post_id的值
    ]
);

方案2:修改数据库表结构(如果业务允许)

如果job_post_questions表的job_post_id字段并非必填项,可以修改表结构,允许该字段为NULL或设置默认值:

  • 直接执行SQL语句:
ALTER TABLE job_post_questions MODIFY COLUMN job_post_id INT NULL DEFAULT NULL;
  • 或者通过Laravel迁移文件修改:
// 在对应的迁移文件中修改字段定义
$table->integer('job_post_id')->nullable()->default(null);

修改后运行php artisan migrate生效。

内容的提问来源于stack exchange,提问作者BnCrshr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:37:15