Gorm 没有给出正确插入记录的主键 ID
Gorm not giving correct inserted record's primary key ID
我在 GO 中使用 GORM。
我有一个实体用户
type User struct {
Id int `json:"id" gorm:"primaryKey;autoIncrement"`
Name string `json:"name"`
gorm.Model
}
我的创建记录代码是
user := User{}
user.Name = "Afzal"
DB.Create(&user)
现在根据文档 user.ID
应该 return 插入数据的主键
但它是 returning 0,这是初始化 struct User 时的默认值。
User.Id
将具有正确的值,因为您已添加该字段并将其标记为主键。 user.ID
实际上访问 user.Model.ID
。这也有 primaryKey 标签,但它被 User
类型的 Id
字段取代。
您已经嵌入了 gorm.Model
类型(根据文档,我想),但这意味着您的 User
类型实际上看起来像这样:
User{
Id int
Name string
gorm.Model{
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt DeletedAt `gorm:"index"`
}
}
因此,当您查看 user.ID
时,您正在访问嵌入的 ID
字段。检查 Id
字段(小写 d
),或删除您添加的 Id
字段,并依赖嵌入的 Model
中的 ID
].
如果您确实想保留自己的 Id
字段,我认为 gorm.Model
将其设为 uint
是正确的。如果您需要处理数据中的负 ID 元素,那么您可能做错了什么……我见过使用负 ID 的情况,但每次我看到它发生时,都是一些绝对可怕的黑客攻击。
我在 GO 中使用 GORM。
我有一个实体用户
type User struct {
Id int `json:"id" gorm:"primaryKey;autoIncrement"`
Name string `json:"name"`
gorm.Model
}
我的创建记录代码是
user := User{}
user.Name = "Afzal"
DB.Create(&user)
现在根据文档 user.ID
应该 return 插入数据的主键
但它是 returning 0,这是初始化 struct User 时的默认值。
User.Id
将具有正确的值,因为您已添加该字段并将其标记为主键。 user.ID
实际上访问 user.Model.ID
。这也有 primaryKey 标签,但它被 User
类型的 Id
字段取代。
您已经嵌入了 gorm.Model
类型(根据文档,我想),但这意味着您的 User
类型实际上看起来像这样:
User{
Id int
Name string
gorm.Model{
ID uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt DeletedAt `gorm:"index"`
}
}
因此,当您查看 user.ID
时,您正在访问嵌入的 ID
字段。检查 Id
字段(小写 d
),或删除您添加的 Id
字段,并依赖嵌入的 Model
中的 ID
].
如果您确实想保留自己的 Id
字段,我认为 gorm.Model
将其设为 uint
是正确的。如果您需要处理数据中的负 ID 元素,那么您可能做错了什么……我见过使用负 ID 的情况,但每次我看到它发生时,都是一些绝对可怕的黑客攻击。