【问题标题】:golang -> gorm: How I can use sql.NullInt64 to be int(10) in mysql?golang -> gorm:如何在 mysql 中使用 sql.NullInt64 成为 int(10)?
【发布时间】:2017-06-02 00:27:49
【问题描述】:
type Contact struct {
  gorm.Model
  PersonID sql.NullInt64
}

type Person struct {
  gorm.Model
}

我正在尝试在 previuos 代码中将gorm 与 mysql 一起使用,但我遇到了以下问题:

我想要:

  • 使用sql.NullInt64 轻松处理空值。
  • 使用基本模型定义gorm.Model,包括字段IDCreatedAtUpdatedAtDeletedAt
  • 添加约束Db.Model(&models.Contact{}).AddForeignKey

我的问题:

  • Person.ID 在 mysql 中变成 "int(10)"
  • Contact.PersonID变成"bigint(20)"
  • MySql 需要与pk and fk 相同的类型。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: mysql go foreign-keys go-gorm


    【解决方案1】:

    gorm.Model 上的“魔法”只是字段的名称,根据 gorm 文档,任何带有这些字段的 struct 看起来像这样,在 Conventions 末尾

    例如:保存具有UpdatedAt字段的记录会将其设置为当前时间。

    或者

    删除有DeletedAt字段的记录,它不会从数据库中删除,只是将字段DeletedAt的值设置为当前时间,查询时找不到记录,参考Soft Delete

    所以解决问题很容易,这是我案例的代码:

    package models
    
    import "time"
    
    type Model struct {
        ID        uint `gorm:"primary_key;type:bigint(20) not null auto_increment"`
        CreatedAt time.Time
        UpdatedAt time.Time
        DeletedAt *time.Time `sql:"index"`
    }
    

    所以,现在我只需要将它用作基础模型 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2021-01-11
      相关资源
      最近更新 更多