gorm - 模型定义
https://learnku.com/docs/gorm/v2/models/9729
模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成
type User struct {<br />
ID uint<br />
Name string<br />
Email *string<br />
Age uint8<br />
Birthday *time.Time<br />
MemberNumber sql.NullString<br />
ActivedAt sql.NullTime<br />
CreatedAt time.Time<br />
UpdatedAt time.Time<br />
}GORM 定义一个
gorm.ModelIDCreatedAtUpdatedAtDeletedAt
// gorm.Model 的定义<br />
type Model struct {<br />
ID uint `gorm:"primaryKey"`<br />
CreatedAt time.Time<br />
UpdatedAt time.Time<br />
DeletedAt gorm.DeletedAt `gorm:"index"`<br />
}嵌入结构体
对于匿名字段,GORM 会将其字段包含在父结构体中,例如:
字段级权限控制
type User struct {<br />
gorm.Model<br />
Name string<br />
}<br />
// 等效于<br />
type User struct {<br />
ID uint `gorm:"primaryKey"`<br />
CreatedAt time.Time<br />
UpdatedAt time.Time<br />
DeletedAt gorm.DeletedAt `gorm:"index"`<br />
Name string<br />
}对于正常的结构体字段,你也可以通过标签
embedded
type Author struct {<br />
Name string<br />
Email string<br />
}</p>
type Blog struct {<br />
ID int<br />
Author Author `gorm:"embedded"`<br />
Upvotes int32<br />
}<br />
// 等效于<br />
type Blog struct {<br />
ID int64<br />
Name string<br />
Email string<br />
Upvotes int32<br />
}
可以使用标签
embeddedPrefix
type Blog struct {<br />
ID int<br />
Author Author `gorm:"embedded;embeddedPrefix:author_"`<br />
Upvotes int32<br />
}<br />
// 等效于<br />
type Blog struct {<br />
ID int64<br />
AuthorName string<br />
AuthorEmail string<br />
Upvotes int32<br />
}可导出的字段在使用 GORM 进行 CRUD 时拥有全部的权限,此外,GORM 允许您用标签控制字段级别的权限。这样您就可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略
注意: 使用 GORM Migrator 创建表时,不会创建被忽略的字段
type User struct {<br />
Name string `gorm:"<-:create"` // 允许读和创建<br />
Name string `gorm:"<-:update"` // 允许读和更新<br />
Name string `gorm:"<-"` // 允许读和写(创建和更新)<br />
Name string `gorm:"<-:false"` // 允许读,禁止写<br />
Name string `gorm:"->"` // 只读(除非有自定义配置,否则禁止写)<br />
Name string `gorm:"->;<-:create"` // 允许读和写<br />
Name string `gorm:"->:false;<-:create"` // 仅创建(禁止从 db 读)<br />
Name string `gorm:"-"` // 读写操作均会忽略该字段<br />
}创建 / 更新时间追踪(纳秒、毫秒、秒、Time)
GORM 约定使用 CreatedAt、UpdatedAt 追踪创建 / 更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充 当前时间
要使用不同名称的字段,您可以配置 autoCreateTim、autoUpdateTim 标签
如果您想要保存 UNIX(毫 / 纳)秒时间戳,而不是 time,您只需简单地将 time.Time 修改为 int 即可
type User struct {<br />
CreatedAt time.Time // 在创建时,如果该字段值为零值,则使用当前时间填充<br />
UpdatedAt int // 在创建时该字段值为零值或者在更新时,使用当前时间戳秒数填充<br />
Updated int64 `gorm:"autoUpdateTime:nano"` // 使用时间戳填纳秒数充更新时间<br />
Updated int64 `gorm:"autoUpdateTime:milli"` // 使用时间戳毫秒数填充更新时间<br />
Created int64 `gorm:"autoCreateTime"` // 使用时间戳秒数填充创建时间<br />
}