戈朗->;gorm:我如何在mysql中使用sql.NullInt64作为int(10)?

戈朗->;gorm:我如何在mysql中使用sql.NullInt64作为int(10)?,mysql,go,foreign-keys,go-gorm,Mysql,Go,Foreign Keys,Go Gorm,我试图在previuos代码中使用mysql,但我有以下问题: 我想: 使用sql.NullInt64轻松处理空值 使用基本模型定义gorm.model,包括字段ID,CreatedAt,UpdatedAt,DeletedAt 添加约束Db.Model(&models.Contact{}).AddForeignKey 我的问题是: Person.ID在mysql中变成“int(10)” Contact.PersonID变成“bigint(20)” MySql需要相同的类型 有人能帮我解决

我试图在previuos代码中使用mysql,但我有以下问题:

我想:

  • 使用
    sql.NullInt64
    轻松处理空值
  • 使用基本模型定义
    gorm.model
    ,包括字段
    ID
    CreatedAt
    UpdatedAt
    DeletedAt
  • 添加约束
    Db.Model(&models.Contact{}).AddForeignKey
我的问题是:

  • Person.ID
    在mysql中变成
    “int(10)”
  • Contact.PersonID
    变成
    “bigint(20)”
  • MySql需要相同的类型
有人能帮我解决这个问题吗?

gorm上的“魔法”。Model只是字段的名称,根据gorm文档,在

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

删除包含
DeletedAt
字段的记录,不会从数据库中删除,只将字段
DeletedAt
的值设置为当前时间,查询时无法找到该记录,请参阅

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

type Contact struct {
  gorm.Model
  PersonID sql.NullInt64
}

type Person struct {
  gorm.Model
}
所以,现在我只需要将其用作基本模型:)

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"`
}