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
}
根据文档,我希望只有一个User定义,所以我创建了一个像这样的对象:
type User struct {
gorm.Model
ID uint
CreatedAt time.Time
Name string
}
但如果我做了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{})
这是非常难看的,我必须遗漏一些东西,任何想法?
答案 0 :(得分:1)
好的,只需阅读gorm.Model
背后的代码,我就得到了答案。
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"`
}
这意味着我只是倾向于继承如何运作!