我是否需要使用gorm(golang)在我的数据库中读取和写入两个不同的对象?

时间:2016-12-09 21:45:23

标签: postgresql go go-gorm

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{})

这是非常难看的,我必须遗漏一些东西,任何想法?

1 个答案:

答案 0 :(得分:1)

好的,只需阅读gorm.Model背后的代码,我就得到了答案。

type Model struct {
    ID        uint `gorm:"primary_key"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt *time.Time `sql:"index"`
}

这意味着我只是倾向于继承如何运作!