在PostgreSQL w/Gorm中使用foreignKey设置多个表之间的关系

carvr3hs  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(120)

所以我有两个不同的表:

type Service struct {
 gorm.Model
 UserID     string `gorm:"type:uuid"`
 Name       string
}

type Artifact struct {
 gorm.Model
 UserID   string `gorm:"type:uuid"`
}

字符串
还有其他类似的表,但主要的想法是,我想使关系,所以如果我删除一个服务,它会删除所有相关表中的条目。
我尝试向Service表添加一个foreignKey,如下所示:

type Service struct {
 gorm.Model
 UserID     string `gorm:"type:uuid"`
 Name       string

 Artifacts Artifacts `gorm:"foreignKey:UserID"`
}


但是这使得UserID从uuid类型变成了bigint类型。我如何确保类型仍然是uuid?

fwzugrvs

fwzugrvs1#

如果您想定义一个关系,在删除Service示例的同时也删除其他表中的相关条目(例如,表等),则需要定义外键关系并配置级联删除行为。
你的代码应该是这样的:

type Service struct {
 gorm.Model
 UserID     string `gorm:"type:uuid"`
 Name       string

 Artifacts []Artifact `gorm:"foreignkey:UserID;constraint:OnDelete:CASCADE;"`
}

字符串
要将UserID类型保留为uuid,您可以在创建外键时显式定义它。

type Service struct {
    gorm.Model
    UserID     string `gorm:"type:uuid"`
    Name       string

    Artifacts []Artifact `gorm:"foreignKey:UserID;references:UserID;constraint:OnDelete:CASCADE;type:uuid"`
}

相关问题