gorm tell in the documentation that "Base model definition gorm.Model, including fields ID, CreatedAt, UpdatedAt, DeletedAt, you could embed it in your model, or only write those fields you want":
// 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
}
Following the documentation, I expect to have only one definition of User, so I create an object like that:
type User struct {
gorm.Model
ID uint
CreatedAt time.Time
Name string
}
But if I do a DB.CreateTable(&User{})
, I get the following errors from postgres:
(pq: column "id" specified more than once)
(pq: column "created_at" specified more than once)
So I have to have two different objects :
type CreateUser struct {
gorm.Model
Name string
}
type RetrieveUser struct {
gorm.Model
ID uint
CreatedAt time.Time
Name string
}
So I can do a DB.CreateTable(&CreateUser{})
It is very ugly and I must be missing something, any idea?