需要约束以具有外键,该外键引用 gorm 中的 has-many 关系中的唯一键

分享于2023年06月29日 foreign-keys go go-gorm has-many unique-key 问答
【问题标题】:required constraints to have foreign key which references to unique key in has-many relationship in gorm需要约束以具有外键,该外键引用 gorm 中的 has-many 关系中的唯一键
【发布时间】:2023-06-25 12:30:01
【问题描述】:

如何让外键引用唯一键而不是gorm中的主键?我在下面有很多关系的数据结构。具有以下约束,我可以在 db 中添加 ModuleData,但我无法添加 DimensionOrderData。但是,如果我有引用主键的外键,那么它可以工作。我是否需要添加更多约束才能使其正常工作?

typeDimensionOrderDatastruct {​​​​​​​​
    ModuleID       int64`gorm:"primary_key;column:module_internal_id"`
    DimensionID    int64`gorm:"primary_key;column:dimension_id"`
    SequenceNumber int`gorm:"column:sequencenumber_cnt"`
}​​​​​​​​


// ModuleData : Module data

typeModuleDatastruct {​​​​​​​​
    ID             string`gorm:"primary_key;type:uuid;column:module_id"`
    InternalID     int64`gorm:"unique;column:internal_id"`
    Name           *string`gorm:"column:name_nm"`
    Reference      *string`gorm:"column:reference_txt"`
    DimensionOrder []DimensionOrderData `gorm:"foreignkey;column:module_internal_id;references:internal_id"`
}​​​​​​​​


【解决方案1】:

此处的 Gorm 文档 https://gorm.io/docs/has_many.html ,指定您可以按如下方式覆盖外键

type User struct {
  gorm.Model
  CreditCards []CreditCard `gorm:"foreignKey:UserRefer"`
}

type CreditCard struct {
  gorm.Model
  Number    string
  UserRefer uint
}

【讨论】:

  • 我是否需要为此提供特定的 gorm 版本?因为我已经访问了上述链接并尝试了不同的选项。但它对我没有用。
  • 添加数据时,我只是添加 err := db.Create(&moduleData).Error ,是否应该将其替换为 err := db.Create(&module).Association("DimensionOrderData")。错误?
  • 我没有收到任何错误,但我的依赖表数据没有添加到 postgres 表中。