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 的情况,但每次我看到它发生时,都是一些绝对可怕的黑客攻击。