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

Laravel项目日期插入失败:SQL日期格式错误排查与解决

Laravel日期插入失败问题解决

问题场景

数据表定义(迁移文件):

public function up()
{
    Schema::create('basic_infos', function (Blueprint $table) {
        $table->id('EmpID');
        $table->string('Emp_Name');
        $table->date('DOB')//date of birth; // 注意:此处缺少分号,属于语法错误
        $table->timestamps();
    });
}

Blade视图代码:

<input type="date" name="DOB"  id="date_of_birth" class="form-control datepicker form-control-md" data-bs-toggle="tooltip" title="Date of Birth">

控制器代码:

public function store(Request $request)
{
    $basicInfo = BasicInfo::create([
        'Emp_name' => $request->Emp_name,
        'DOB' => $request->DOB,
    ]);
}

点击保存时出现错误:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '2 August, 2022' for column..

错误原因

MySQL的date类型字段仅接受YYYY-MM-DD格式的日期字符串,而当前提交的是2 August, 2022这类本地化格式,不符合数据库要求,导致SQL执行失败。

另外迁移文件中$table->date('DOB')末尾缺少分号,属于语法错误,需先修正。

解决方案

方案1:控制器中手动转换日期格式

使用Laravel自带的Carbon类解析并转换日期格式:

use Carbon\Carbon;

public function store(Request $request)
{
    $basicInfo = BasicInfo::create([
        'Emp_name' => $request->Emp_name,
        'DOB' => Carbon::parse($request->DOB)->format('Y-m-d'),
    ]);
}

方案2:模型中定义日期修改器(Mutator)

在BasicInfo模型中添加自动转换逻辑,后续无需在控制器重复处理:

use Carbon\Carbon;

class BasicInfo extends Model
{
    // ... 其他代码

    public function setDOBAttribute($value)
    {
        $this->attributes['DOB'] = Carbon::parse($value)->format('Y-m-d');
    }
}

方案3:调整前端日期选择器的输出格式

如果使用的是第三方datepicker插件(如jQuery UI Datepicker),直接设置插件输出YYYY-MM-DD格式:

// 以jQuery UI Datepicker为例
$('#date_of_birth').datepicker({
    dateFormat: 'yy-mm-dd'
});

这样前端提交的日期格式直接符合数据库要求,无需后端转换。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:36:27