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(纳秒/毫秒)进行跟踪,请查看 模型 了解更多详细信息