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
相关产品推荐
相关产品推荐

