Laravel中如何自动存储带毫秒的日期时间?
Laravel 中 Timestamp 列存储毫秒的实现方法
自动存储毫秒
首先确保你的 Laravel 版本在 5.6 及以上(该版本开始支持毫秒级时间戳),同时 MySQL 版本需不低于 5.6.4(支持毫秒存储)。要让 Eloquent 自动存储带毫秒的时间戳,在对应模型中做以下设置:
- 添加
$dateFormat属性,指定包含毫秒的时间格式:
protected $dateFormat = 'Y-m-d H:i:s.u';
- 若使用 Laravel 8+,也可通过
$casts属性指定字段类型:
protected $casts = [ 'date_time' => 'datetime:Y-m-d H:i:s.u', ];
完成设置后,通过 Eloquent 创建或更新记录时,date_time 字段会自动写入当前的毫秒级时间。如果要让默认的 created_at/updated_at 也存储毫秒,只需在迁移中把这两个字段改为 $table->timestamp('created_at', 6)->nullable(); 和 $table->timestamp('updated_at', 6)->nullable();,再配合上述模型设置即可。
手动存储毫秒
如果需要手动指定带毫秒的时间值,可采用以下方式:
- 使用 Carbon 类生成并赋值:
use Carbon\Carbon; // 直接传递 Carbon 实例,Eloquent 会自动处理毫秒 $model->date_time = Carbon::now(); $model->save(); // 或者手动格式化后赋值 $model->date_time = Carbon::now()->format('Y-m-d H:i:s.u'); $model->save();
- 借助 MySQL 内置函数
CURRENT_TIMESTAMP(6)直接插入:
DB::table('your_table')->insert([ 'date_time' => DB::raw('CURRENT_TIMESTAMP(6)'), // 其他字段 ]);
内容的提问来源于stack exchange,提问作者Hamid Hosseini
相关产品推荐
相关产品推荐

