使用 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 获取详情