本文视频教程:https://www.bilibili.com/vide…
模型定义
模型是规范的 struct,由 Go 的根本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成
例如:
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
约定
ID蛇形复数蛇形CreatedAtUpdatedAt
遵循 GORM 已有的约定,能够缩小您的配置和代码量。如果约定不合乎您的需要,GORM 容许您自定义配置它们
gorm.Model
gorm.ModelIDCreatedAtUpdatedAtDeletedAt
// gorm.Model 的定义
type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
您能够将它嵌入到您的构造体中,以蕴含这几个字段,详情请参考 嵌入构造体
高级选项
字段级权限管制
可导出的字段在应用 GORM 进行 CRUD 时领有全副的权限,此外,GORM 容许您用标签管制字段级别的权限。这样您就能够让一个字段的权限是只读、只写、只创立、只更新或者被疏忽
留神: 应用 GORM Migrator 创立表时,不会创立被疏忽的字段
type User struct {
Name string `gorm:"<-:create"` // 容许读和创立
Name string `gorm:"<-:update"` // 容许读和更新
Name string `gorm:"<-"` // 容许读和写(创立和更新)
Name string `gorm:"<-:false"` // 容许读,禁止写
Name string `gorm:"->"` // 只读(除非有自定义配置,否则禁止写)
Name string `gorm:"->;<-:create"` // 容许读和写
Name string `gorm:"->:false;<-:create"` // 仅创立(禁止从 db 读)
Name string `gorm:"-"` // 通过 struct 读写会疏忽该字段
}
创立/更新工夫追踪(纳秒、毫秒、秒、Time)
CreatedAtUpdatedAt
autoCreateTimeautoUpdateTime
time.Timeint
type User struct {
CreatedAt time.Time // Set to current time if it is zero on creating
UpdatedAt int // Set to current unix seconds on updating or if it is zero on creating
Updated int64 `gorm:"autoUpdateTime:nano"` // Use unix nano seconds as updating time
Updated int64 `gorm:"autoUpdateTime:milli"`// Use unix milli seconds as updating time
Created int64 `gorm:"autoCreateTime"` // Use unix seconds as creating time
}
嵌入构造体
对于匿名字段,GORM 会将其字段蕴含在父构造体中,例如:
type User struct {
gorm.Model
Name string
}
// 等效于
type User struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
Name string
}
embedded
type Author struct {
Name string
Email string
}
type Blog struct {
ID int
Author Author `gorm:"embedded"`
Upvotes int32
}
// 等效于
type Blog struct {
ID int64
Name string
Email string
Upvotes int32
}
embeddedPrefix
type Blog struct {
ID int
Author Author `gorm:"embedded;embeddedPrefix:author_"`
Upvotes int32
}
// 等效于
type Blog struct {
ID int64
AuthorName string
AuthorEmail string
Upvotes int32
}
字段标签
camelCase
not nullsizeautoIncrementvarbinary(8)MEDIUMINT UNSIGNED not NULL AUTO_INCREMENTsize:256intnanomilliautoCreateTime:nanointnanomilliautoUpdateTime:milliindexcheck:age > 13<-:create<-:update<-:false<-->:false-
关联标签
GORM 容许通过标签为关联配置外键、束缚、many2many 表,详情请参考 关联局部
原为链接:https://gorm.io/docs/models.html