添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

GORM 通过将 Go 结构体映射到数据库表来简化数据库交互。了解如何在 GORM 中声明模型是利用其全部功能的基础。

声明模型

Scanner Valuer 接口

考虑以下 User 模型的示例

type User struct {
ID uint // Standard field for the primary key
Name string // A regular string field
Email *string // A pointer to a string, allowing for null values
Age uint8 // An unsigned 8-bit integer
Birthday *time.Time // A pointer to time.Time, can be null
MemberNumber sql.NullString // Uses sql.NullString to handle nullable strings
ActivatedAt sql.NullTime // Uses sql.NullTime for nullable time fields
CreatedAt time.Time // Automatically managed by GORM for creation time
UpdatedAt time.Time // Automatically managed by GORM for update time
}

在这个模型中

  • 基本数据类型,如 uint string uint8 ,直接使用。
  • 指向类型的指针,如 *string *time.Time ,表示可为空的字段。
  • database/sql 包中的 sql.NullString sql.NullTime 用于需要更多控制的可为空字段。
  • CreatedAt UpdatedAt 是特殊字段,GORM 会在创建或更新记录时自动使用当前时间填充它们。
  • 除了 GORM 中模型声明的基本功能外,重要的是要强调通过序列化器标签对序列化的支持。此功能增强了从数据库存储和检索数据的灵活性,特别是对于需要自定义序列化逻辑的字段,有关详细说明,请参阅 序列化器

  • 主键 :GORM 使用名为 ID 的字段作为每个模型的默认主键。

  • 表名 :默认情况下,GORM 会将结构体名称转换为 snake_case 并将其复数形式用于表名。例如, User 结构体在数据库中变为 users

  • 列名 :GORM 会自动将结构体字段名称转换为 snake_case ,以用于数据库中的列名。

  • 时间戳字段 :GORM 使用名为 CreatedAt UpdatedAt 的字段来自动跟踪记录的创建时间和更新时间。

    遵循这些约定可以大大减少您需要编写的配置或代码量。但是,GORM 也很灵活,允许您在默认约定不符合您的要求时自定义这些设置。您可以在 GORM 关于 约定 的文档中了解更多有关自定义这些约定的信息。

    gorm.Model

  • 嵌入式结构体

  • 包含的字段 :

  • ID :每条记录的唯一标识符(主键)。
  • CreatedAt :在创建记录时自动设置为当前时间。
  • UpdatedAt :每当记录更新时自动更新为当前时间。
  • DeletedAt :用于软删除(将记录标记为已删除,而不实际从数据库中删除它们)。
  • 高级

    字段级权限

    创建/更新时间/Unix(毫秒/纳秒)秒跟踪

    当前时间

    要使用具有不同名称的字段,可以使用标签 autoCreateTime autoUpdateTime 配置这些字段

    如果您希望保存 UNIX(毫秒/纳秒)秒而不是时间,则只需将字段的数据类型从 time.Time 更改为 int 即可

    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
    }

    嵌入结构体

    字段标签

    索引 uniqueIndex 与 index 相同,但创建唯一索引 check 创建检查约束,例如: check:age > 13 ,请参阅 约束 设置字段的写权限, <-:create 只读字段, <-:update 只更新字段, <-:false 无写权限, <- 创建和更新权限 设置字段的读权限, ->:false 无读权限 忽略此字段, - 无读/写权限, -:migration 无迁移权限, -:all 无读/写/迁移权限 comment 在迁移时为字段添加注释

    关联标签

    关联部分