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

Laravel中存入数据库的timestamp取出后转为字符串无法调用方法如何解决?

问题原因

Laravel默认仅会对内置的created_at、updated_at两个时间字段做Carbon实例自动转换,public $timestamps = true的作用只是控制这两个字段是否自动写入,不会作用于你自定义的start_at时间字段,因此从数据库取出的start_at是原生字符串格式,无法调用Carbon的方法。

可行解决方案

方案1:使用$dates属性配置自定义时间字段

在对应Model中添加$dates属性,将start_at加入配置列表即可,Laravel会自动在该字段存取时转换为Carbon实例:

protected $dates = [
    'start_at',
    // 其他自定义时间字段可一并加入
];

该配置兼容Laravel全版本,添加后直接调用$user->start_at->lte(now())即可正常运行。

方案2:使用$casts属性显式指定类型转换(推荐Laravel 8+版本使用)

Laravel 8及以上版本更推荐使用$casts做字段类型声明,配置方式如下:

protected $casts = [
    'start_at' => 'datetime',
    // 其他字段类型配置
];

该方式支持更多自定义转换规则,灵活性更高。

临时解决方案:手动转Carbon实例

如果不想改动模型配置,可以在调用方法前手动转换:

Carbon::parse($user->start_at)->lte(now())

该方式仅适合临时调用场景,不推荐高频使用,重复解析会产生不必要的性能开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:01