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

Laravel数据库migration中dateTime字段存入后显示0000-00-00问题

问题原因及解决方法

常见触发原因

  • 输入日期格式不匹配:Laravel Migration中定义的dateTime字段要求写入格式为Y-m-d H:i:s,如果前端提交的是d/m/Y H:i之类的非标准格式(即日/月/年格式),框架无法正常解析,就会传入空值给数据库,最终存储为0000-00-00 00:00:00。
  • 模型批量赋值白名单未配置:如果你使用Eloquent模型进行数据写入,需要确认appointment_date字段已经添加到模型的$fillable属性中,否则批量赋值时该字段会被直接过滤,没有传值的情况下就会写入数据库默认的零值。
  • 数据库非严格模式掩盖错误:MySQL默认未开启严格模式时,写入无效的datetime值不会抛出报错,而是自动转换为零值存储,无法直接感知到格式错误问题。

对应解决方案

  1. 写入前转换日期格式,推荐使用Carbon处理用户输入:
use Carbon\Carbon;

// 按前端实际输入格式调整createFromFormat的第一个参数
$validDate = Carbon::createFromFormat('d/m/Y H:i', $request->appointment_date)->format('Y-m-d H:i:s');

// 写入数据
Appointment::create([
    'appointment_date' => $validDate,
    // 其他字段
]);
  1. 检查对应模型的$fillable配置,确保字段在白名单内:
// 对应模型文件中
protected $fillable = [
    // 其他允许批量赋值的字段
    'appointment_date',
];
  1. 可以调整Migration配置,给字段添加可空属性,避免零值出现:
$table->dateTime('appointment_date')->nullable();
  1. 排查阶段可以开启SQL监听,查看实际传入的参数是否符合预期:
// 临时添加到接口逻辑上方
\DB::listen(function ($query) {
    var_dump($query->sql, $query->bindings);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:06:04