我一直在使用GORM的自动迁移函数来维护我的数据库表,但是我遇到了GORM试图更改外键的问题,在这个特定的例子中,GORM试图将数据库列从int更改为bigint。
使用MySQL 5.7、Go 1.19和GORM 1.24.5(基于文档,可能是GORM v2的早期版本)。
此类型
type AggregatorCode struct {
Id int `gorm:"primary_key:id"`
AggregatorId int `json:"aggregator_id"`
MappedCode string `json:"mapped_code"`
MappedName string `json:"mapped_name"`
}
属于
type Aggregator struct {
Id int `gorm:"primary_key:id"`
Name string `json:"name"`
Description string `json:"description"`
AggregatorCode []aggregator_codes.AggregatorCode `gorm:"ForeignKey:aggregator_id"`
CreatedAt time.Time
}
我正在尝试阻止它更改AggregatorId字段,因为我收到了此错误。
/go/app/db_migrations/migrations.go:38 Error 1832 (HY000): Cannot change column 'aggregator_id': used in a foreign key constraint 'aggregator_codes_ibfk_1'
[14.431ms] [rows:0] ALTER TABLE `aggregator_codes` MODIFY COLUMN `aggregator_id` bigint
到目前为止,我已经尝试过在结构体上添加标记或更改类型,但都没有成功。
AggregatorId int `gorm:"type:int" json:"aggregator_id"`
OR
AggregatorId int `gorm:"type:int32" json:"aggregator_id"`
OR
AggregatorId int32 `gorm:"type:int32" json:"aggregator_id"`
如果有人有建议那就太好了。
1条答案
按热度按时间bvjxkvbb1#
要解决此问题,只需将
Aggregator
模型中的Id
字段和AggregatorCode
模型中的AggregatorId
字段的类型设置为int32
或uint32