ID
作为主键
GORM 默认使用名称为 ID
的字段作为表的主键。
type User struct { |
您可以使用标签 primaryKey
将其他字段设置为主键
// Set field `UUID` as primary field |
另请参阅 复合主键
表名复数化
GORM 默认将结构体名称复数化为 snake_cases
作为表名,例如结构体 User
,其表名为 users
表名
您可以通过实现 Tabler
接口来更改默认表名,例如
type Tabler interface { |
注意
TableName
不允许动态名称,其结果将被缓存以供将来使用,要使用动态名称,您可以使用Scopes
,例如
func UserTable(user User) func (tx *gorm.DB) *gorm.DB { |
临时指定名称
使用 Table
方法临时指定表名,例如
// Create table `deleted_users` with struct User's fields |
查看 From 子查询 了解如何在 FROM 子句中使用子查询
命名策略
GORM 允许用户通过覆盖默认的 NamingStrategy
来更改默认命名约定,该策略用于构建 TableName
、ColumnName
、JoinTableName
、RelationshipFKName
、CheckerName
、IndexName
,请查看 GORM 配置 了解更多详细信息
列名
列数据库名称默认使用字段名称的 snake_case
形式。
type User struct { |
您可以使用标签 column
覆盖列名,或使用 NamingStrategy
type Animal struct { |
时间戳跟踪
创建时间
对于具有 CreatedAt
字段的模型,如果其值为零,则在首次创建记录时,该字段将设置为当前时间
db.Create(&user) // set `CreatedAt` to current time |
您可以通过将 autoCreateTime
标签设置为 false
来禁用时间戳跟踪,例如
type User struct { |
更新时间
对于具有 UpdatedAt
字段的模型,如果其值为零,则在更新或创建记录时,该字段将设置为当前时间
db.Save(&user) // set `UpdatedAt` to current time |
您可以通过将 autoUpdateTime
标签设置为 false
来禁用时间戳跟踪,例如
type User struct { |
注意 GORM 支持多个时间跟踪字段并使用 UNIX(纳秒/毫秒)进行跟踪,请查看 模型 了解更多详细信息