在前面的整型字段的示例中,时间字段写入的都是秒级时间戳,但如果我们想要控制时间写入的粒度,写入毫秒级时间戳怎么做呢? 我们可以使用SoftTimeOption来控制写入的时间数值粒度。

示例SQL

这是后续示例代码中用到的MySQL表结构。由于需要写入比秒级更细粒度的数值,因此字段类型使用big int来存储。

  1. CREATE TABLE `user` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(45) NOT NULL,
  4. `status` tinyint DEFAULT 0,
  5. `created_at` bigint unsigned DEFAULT NULL,
  6. `updated_at` bigint unsigned DEFAULT NULL,
  7. `deleted_at` bigint unsigned DEFAULT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

时间维护-SoftTimeOption - 图1提示

如果您尝试测试查看ORM操作执行的SQL语句,建议您打开debug模式(相关文档:调试模式),SQL语句将会自动打印到日志输出。

created_at 写入时间

  1. // INSERT INTO `user`(`name`,`created_at`,`updated_at`,`deleted_at`) VALUES('john',1731484186556,1731484186556,0)
  2. g.Model("user").SoftTime(gdb.SoftTimeOption{
  3. SoftTimeType: gdb.SoftTimeTypeTimestampMilli,
  4. }).Data(g.Map{"name": "john"}).Insert()

其中SoftTimeType控制时间粒度,粒度选项如下:

  1. const (
  2. SoftTimeTypeAuto SoftTimeType = 0 // (Default)Auto detect the field type by table field type.
  3. SoftTimeTypeTime SoftTimeType = 1 // Using datetime as the field value.
  4. SoftTimeTypeTimestamp SoftTimeType = 2 // In unix seconds.
  5. SoftTimeTypeTimestampMilli SoftTimeType = 3 // In unix milliseconds.
  6. SoftTimeTypeTimestampMicro SoftTimeType = 4 // In unix microseconds.
  7. SoftTimeTypeTimestampNano SoftTimeType = 5 // In unix nanoseconds.
  8. )