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

Laravel存储Datepicker日期到MySQL显示0000-00-00如何解决

问题产生原因

  • 最核心的原因是Post模型未将startdatum、enddatum两个字段加入$fillable批量赋值白名单。Laravel执行create()批量赋值时会自动过滤不在白名单内的字段,相当于这两个字段未传入,MySQL就会使用默认的0000-00-00作为值,你之前加Carbon::parse无效也是因为字段被过滤了。
  • 次要原因是未在模型中配置日期字段的类型转换,Laravel无法识别这两个字段是日期类型,也可能导致存储异常。
  • 小概率原因是数据库表的对应字段类型不是date/datetime,或者前端传入的日期格式不符合数据库要求。

解决步骤

  1. 打开你的App\Models\Post.php模型文件,将两个日期字段加入$fillable数组:
protected $fillable = [
    'titel',
    'standort',
    'kontakt',
    'startdatum',
    'enddatum',
    'beschreibung',
    // 其他允许批量赋值的字段
];
  1. 同样在Post模型中添加日期字段类型配置,二选一即可:
    方式一(兼容所有Laravel版本):
protected $dates = [
    'startdatum',
    'enddatum',
    // 其他日期类型字段
];

方式二(Laravel7+推荐):

protected $casts = [
    'startdatum' => 'date:Y-m-d',
    'enddatum' => 'date:Y-m-d',
    // 其他字段的类型转换规则
];
  1. 完成上述配置后你最初的控制器代码即可正常运行,不需要额外手动用Carbon::parse处理日期。如果还是存储异常,可以打印create方法返回的实例检查字段是否正常赋值:
$post = $request->user()->posts()->create([
    // 你的字段赋值逻辑
]);
dd($post);

如果返回的实例中日期字段有值但数据库无值,检查数据库表对应字段的类型是否为date或datetime即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:04