Gorm试图更改外键

dm7nw8vv  于 2023-03-06  发布在  Go
关注(0)|答案(1)|浏览(110)

我一直在使用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"`

如果有人有建议那就太好了。

bvjxkvbb

bvjxkvbb1#

要解决此问题,只需将Aggregator模型中的Id字段和AggregatorCode模型中的AggregatorId字段的类型设置为int32uint32

type Aggregator struct {
    Id int32    `gorm:"primary_key:id"`
    ....
}
type AggregatorCode struct {
    ...
    AggregatorId int32    `json:"aggregator_id"`
    ...
}

相关问题