【问题标题】: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,包括字段ID、CreatedAt、UpdatedAt、DeletedAt。
- 添加约束
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"`
}
所以,现在我只需要将它用作基础模型 :)