GORM 数据库中的自动迁移将不需要的字段添加到 SQL table
Automigrate in GORM database adds unwanted fields to SQL table
当我在 gorm 数据库中创建 table 时,它会向 table 添加我不需要的列。我不确定它是如何添加这些额外字段的。这导致我 运行 出现错误,指出 "pq: null value in column "user_id" 违反了非空约束"。 "user_id" 是添加的不需要的列。我正在使用 gorm 和 postgreSQL。
我的两个 table 之间存在多对多关系。我的第一个 table 已正确创建,第二个 table 商店是使用提供的字段加上两个不需要的字段创建的:"user_id" 和 "stores_id"。我尝试删除多对多关系以查看是否是问题所在,我尝试删除 tables 并使用不同的字段重新创建它们。不管怎样,我还是没能去掉多余的两列。
第一个(工作)table:
type User struct {
gorm.Model
ID int `json:"u_id"`
Name string `json:"u_name"`
Stores []Store `gorm:"many2many:stores;" json:"stores"`
}
当我执行'\d users'时,我得到以下列:id, created_at, updated_at, deleted_at, name.
第二个(有问题)table:
type Stores struct {
gorm.Model
ID int `json:"s_id"`
NUM int `gorm:"unique" json:"s_num"`
Users []User `gorm:"many2many:user" json:"users"`
}
当我执行 '\d' 商店时,我得到以下列:user_id、vehicle_id、id、created_at、updated_at、deleted_at, 数量
我正在通过以下代码执行这些 table 的创建:
db.AutoMigrate(&User{})
db.AutoMigrate(&Store{})
另一方面,如果我将 gorm:"primary_key";auto_increment"
添加到我的结构中的 ID 值,我会收到错误消息“pq: column "user_id" appears twice in primary key constraint”。我能够通过删除 primary_key 和 auto_increment 属性来解决这个问题,运行ning AutoMigrate() 然后将其重新添加并再次 运行ning AutoMigrate() -这非常好并且可以正常工作。
我也试过手动插入 user_id 和 store_id。这很好用,除了我每次都必须生成新的,因为它们需要唯一性。我知道错误 "pq: null value in column "user_id" violates not-null constraint" 是由于我在创建时没有提供 user_id 或 store_id我的商店。我很困惑为什么会生成 user_id 和 store_id 列,我希望我能解决这个问题。
这就是 gorm.Model
的样子
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
当我们在结构中调用 gorm.Model
时,这意味着我们在当前结构中添加 gorm.Model
的默认字段。
type Stores struct {
gorm.Model
....
所以你的用户模型看起来像
ype User struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
ID int `json:"u_id"`
Name string `json:"u_name"`
Stores []Store `gorm:"many2many:stores;" json:"stores"`
}
该错误可能是由于 primary_key 密钥重复造成的。尝试将 ID int
json:"u_id"`` 重命名为 UserID
。你也需要更新 Stores
。
通过删除 gorm.Model 修复了重复的 ID 错误,@(Akshaydeep Girl)指出 gorm.Model 意味着什么。至于一直自动添加的随机'user_id'和'store_id',是因为many2many gorm关系才添加的。我能够通过切换迁移顺序来删除它们。
func DBMigrate(db *gorm.DB) *gorm.DB {
db.AutoMigrate(&Store{})
db.AutoMigrate(&User{})
return db
}
当我用新的迁移顺序删除 tables 和 re-compiled/ran 我的项目时,商店 table 是在没有随机 'user_id' 和 'store_id',而用户 table 也没有。
当我在 gorm 数据库中创建 table 时,它会向 table 添加我不需要的列。我不确定它是如何添加这些额外字段的。这导致我 运行 出现错误,指出 "pq: null value in column "user_id" 违反了非空约束"。 "user_id" 是添加的不需要的列。我正在使用 gorm 和 postgreSQL。
我的两个 table 之间存在多对多关系。我的第一个 table 已正确创建,第二个 table 商店是使用提供的字段加上两个不需要的字段创建的:"user_id" 和 "stores_id"。我尝试删除多对多关系以查看是否是问题所在,我尝试删除 tables 并使用不同的字段重新创建它们。不管怎样,我还是没能去掉多余的两列。
第一个(工作)table:
type User struct {
gorm.Model
ID int `json:"u_id"`
Name string `json:"u_name"`
Stores []Store `gorm:"many2many:stores;" json:"stores"`
}
当我执行'\d users'时,我得到以下列:id, created_at, updated_at, deleted_at, name.
第二个(有问题)table:
type Stores struct {
gorm.Model
ID int `json:"s_id"`
NUM int `gorm:"unique" json:"s_num"`
Users []User `gorm:"many2many:user" json:"users"`
}
当我执行 '\d' 商店时,我得到以下列:user_id、vehicle_id、id、created_at、updated_at、deleted_at, 数量
我正在通过以下代码执行这些 table 的创建:
db.AutoMigrate(&User{})
db.AutoMigrate(&Store{})
另一方面,如果我将 gorm:"primary_key";auto_increment"
添加到我的结构中的 ID 值,我会收到错误消息“pq: column "user_id" appears twice in primary key constraint”。我能够通过删除 primary_key 和 auto_increment 属性来解决这个问题,运行ning AutoMigrate() 然后将其重新添加并再次 运行ning AutoMigrate() -这非常好并且可以正常工作。
我也试过手动插入 user_id 和 store_id。这很好用,除了我每次都必须生成新的,因为它们需要唯一性。我知道错误 "pq: null value in column "user_id" violates not-null constraint" 是由于我在创建时没有提供 user_id 或 store_id我的商店。我很困惑为什么会生成 user_id 和 store_id 列,我希望我能解决这个问题。
这就是 gorm.Model
的样子
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
当我们在结构中调用 gorm.Model
时,这意味着我们在当前结构中添加 gorm.Model
的默认字段。
type Stores struct {
gorm.Model
....
所以你的用户模型看起来像
ype User struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
ID int `json:"u_id"`
Name string `json:"u_name"`
Stores []Store `gorm:"many2many:stores;" json:"stores"`
}
该错误可能是由于 primary_key 密钥重复造成的。尝试将 ID int
json:"u_id"`` 重命名为 UserID
。你也需要更新 Stores
。
通过删除 gorm.Model 修复了重复的 ID 错误,@(Akshaydeep Girl)指出 gorm.Model 意味着什么。至于一直自动添加的随机'user_id'和'store_id',是因为many2many gorm关系才添加的。我能够通过切换迁移顺序来删除它们。
func DBMigrate(db *gorm.DB) *gorm.DB {
db.AutoMigrate(&Store{})
db.AutoMigrate(&User{})
return db
}
当我用新的迁移顺序删除 tables 和 re-compiled/ran 我的项目时,商店 table 是在没有随机 'user_id' 和 'store_id',而用户 table 也没有。