gorm 在文档中告诉“基本模型定义 gorm.Model,包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,您可以将其嵌入到您的模型中,或者只编写您想要的那些字段”:
// Base Model's definition
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
// Add fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`
type User struct {
gorm.Model
Name string
}
// Only need field `ID`, `CreatedAt`
type User struct {
ID uint
CreatedAt time.Time
Name string
}
按照文档,我希望只有一个用户定义,所以我创建了一个这样的对象:
type User struct {
gorm.Model
ID uint
CreatedAt time.Time
Name string
}
但如果我执行 a DB.CreateTable(&User{})
,我会从 postgres 收到以下错误:
(pq: column "id" specified more than once)
(pq: column "created_at" specified more than once)
所以我必须有两个不同的对象:
type CreateUser struct {
gorm.Model
Name string
}
type RetrieveUser struct {
gorm.Model
ID uint
CreatedAt time.Time
Name string
}
所以我可以做一个DB.CreateTable(&CreateUser{})
它非常难看,我一定遗漏了一些东西,知道吗?