gorm申明模型

本文视频教程: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