需要注意,该特性仅对链式操作有效。
gdb
模块支持对数据记录的写入、更新、删除时间自动填充,提高开发维护效率。为了便于时间字段名称、类型的统一维护,如果使用该特性,我们约定:
- 字段应当设置允许值为
null
。 - 字段的类型必须为时间类型,如:
date
,datetime
,timestamp
。不支持数字类型字段,如int
。 - 字段的名称支持自定义设置,默认名称约定为:
created_at
用于记录创建时更新,仅会写入一次。updated_at
用于记录修改时更新,每次记录变更时更新。deleted_at
用于记录的软删除特性,只有当记录删除时会写入一次。
字段名称其实不区分大小写,也会忽略特殊字符,例如 CreatedAt
, UpdatedAt
, DeletedAt
也是支持的。此外,时间字段名称可以通过配置文件进行自定义修改,并可使用 TimeMaintainDisabled
配置完整关闭该特性,具体请参考 ORM使用配置 章节。
对时间类型的固定其实是为了形成一种规范。
特性的启用
当数据表包含 created_at
、 updated_at
、 deleted_at
任意一个或多个字段时,该特性自动启用。
以下的示例中,我们默认示例中的数据表均包含了这3个字段。
created_at
写入时间
在执行 Insert/InsertIgnore/BatchInsert/BatchInsertIgnore
方法时自动写入该时间,随后保持不变。
// INSERT INTO `user`(`name`,`created_at`,`updated_at`) VALUES('john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"name": "john"}).Insert()
// INSERT IGNORE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).InsertIgnore()
// REPLACE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).Replace()
// INSERT INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10001,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`) ON DUPLICATE KEY UPDATE `uid`=VALUES(`uid`),`name`=VALUES(`name`),`updated_at`=VALUES(`updated_at`)
g.Model("user").Data(g.Map{"uid": 10001, "name": "john"}).Save()