使用 ID 作为主键
默认情况下,GORM 会使用 ID 作为表的主键。
type User struct { |
你可以通过标签 primaryKey 将其它字段设为主键
// 将 `UUID` 设为主键 |
此外,您还可以看看 复合主键
复数表名
GORM 使用结构体名的 蛇形命名 作为表名。对于结构体 User,根据约定,其表名为 users
TableName
您可以实现 Tabler 接口来更改默认表名,例如:
type Tabler interface { |
注意:
TableName不支持动态变化,它会被缓存下来以便后续使用。想要使用动态表名,你可以使用Scopes,例如:
func UserTable(user User) func (tx *gorm.DB) *gorm.DB { |
临时指定表名
您可以使用 Table 方法临时指定表名,例如:
// 根据 User 的字段创建 `deleted_users` 表 |
查看 from 子查询 了解如何在 FROM 子句中使用子查询
命名策略
GORM allows users to change the default naming conventions by overriding the default NamingStrategy, which is used to build TableName, ColumnName, JoinTableName, RelationshipFKName, CheckerName, IndexName, Check out GORM Config for details
列名
根据约定,数据表的列名使用的是 struct 字段名的 蛇形命名
type User struct { |
您可以使用 column 标签或 命名策略 来覆盖列名
type Animal struct { |
时间戳追踪
CreatedAt
对于有 CreatedAt 字段的模型,创建记录时,如果该字段值为零值,则将该字段的值设为当前时间
db.Create(&user) // 将 `CreatedAt` 设为当前时间 |
你可以通过将 autoCreateTime 标签置为 false 来禁用时间戳追踪,例如:
type User struct { |
UpdatedAt
对于有 UpdatedAt 字段的模型,更新记录时,将该字段的值设为当前时间。创建记录时,如果该字段值为零值,则将该字段的值设为当前时间
db.Save(&user) // 将 `UpdatedAt` 设为当前时间 |
你可以通过将 autoUpdateTime 标签置为 false 来禁用时间戳追踪,例如:
type User struct { |
注意 GORM 支持拥有多种类型的时间追踪字段。可以根据 UNIX(毫/纳)秒,查看 Model 获取详情