如何访问 gorm.Model.ID?

Nla*_*ALD 4 model go go-gorm

所以 gorm.Model 提供了一些基本属性或字段:

ID        uint       `json:"-" gorm:"primary_key"`
CreatedAt time.Time  `json:"-"`
UpdatedAt time.Time  `json:"-"`
DeletedAt *time.Time `json:"-" sql:"index"`
Run Code Online (Sandbox Code Playgroud)

你可以这样使用它

type User struct {
  gorm.Model
  Name         string
  Email        string  `gorm:"type:varchar(100);unique_index"`
  Role         string  `gorm:"size:255"` // set field size to 255

}
Run Code Online (Sandbox Code Playgroud)

所以当我在我的模型控制器上工作以进行删除(或任何我需要比较 ID 的地方)

这不起作用,给我一个错误:

c.Ctx.DB.Delete(&models.Address{ID: id})
Run Code Online (Sandbox Code Playgroud)

github.com/NlaakStudios/PASIT/models 类型的结构文字中的未知字段“ID”。地址

而且,这不起作用,给我一个错误:

 c.Ctx.DB.Delete(&models.Address{gorm.Model.ID: id})
Run Code Online (Sandbox Code Playgroud)

struct initializer id int 中的无效字段名称 gorm.Model.ID

如果我删除 gorm.Model 并在每个模型中自己定义字段......它就可以工作。

type User struct {
ID        uint       `json:"-" gorm:"primary_key"`
CreatedAt time.Time  `json:"-"`
UpdatedAt time.Time  `json:"-"`
DeletedAt *time.Time `json:"-" sql:"index"`
  Name         string
  Email        string  `gorm:"type:varchar(100);unique_index"`
  Role         string  `gorm:"size:255"` // set field size to 255
}
Run Code Online (Sandbox Code Playgroud)

我如何访问这四个基本字段?

小智 7

我处理过这个:删除包名称“gorm”

c.Ctx.DB.Delete(&models.Address{Model: gorm.Model{ID: id}})
Run Code Online (Sandbox Code Playgroud)


seb*_*o91 6

您在上一个示例中非常接近。gorm.Model如果您想要/需要,您可以从您的结构中删除继承(为了清楚起见,我个人这样做),但要访问该值,您只需要多构建一点结构。例如...

type Address struct {
    gorm.Model
    Name         string
    Email        string  `gorm:"type:varchar(100);unique_index"`
    Role         string  `gorm:"size:255"` // set field size to 255
}

c.Ctx.DB.Delete(&models.Address{gorm.Model: gorm.Model{ID: id}})
Run Code Online (Sandbox Code Playgroud)

试一试,看看它是否适合你。或者在不继承的情况下恢复到您的方法gorm.Model