为了账号安全,请及时绑定邮箱和手机立即绑定

gorm:为关系定义一个有效的外键或实现 Valuer/Scanner 接口

gorm:为关系定义一个有效的外键或实现 Valuer/Scanner 接口

Go
慕桂英4014372 2022-11-08 16:12:55
我想在我的模型中添加一些外键。我所做的与添加外键的文档完全相同。这些是模型专辑型号:type Album struct {    gorm.Model    Artists     []Artist    Name        string    ReleaseDate time.Time    Genre       Genre    Picture     string}艺人模特:type Artist struct {    gorm.Model    Name        string    Description string    YearsActive string}流派型号:type Genre struct {    gorm.Model    Name        string    Description string}轨道型号:type Track struct {    gorm.Model    Album    Album    Name     string    Artists  []Artist    Playtime time.Duration}以及我用于创建表的代码:DB.Debug().AutoMigrate(&models.Genre{}, &models.Artist{}, &models.Album{}, &models.Track{})我在这里做错了什么?我是外键概念的新手。我只想将曲目分别与他们的艺术家和专辑相关联。
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

所以,问题是gorm不知道如何将专辑与艺术家联系起来(其他人也一样),你需要在结构中添加AlbumID字段Artist才能让gorm知道结构之间的联系是什么。


这是您提供的所有结构的示例:


专辑型号:


type Album struct {

    gorm.Model

    Artists     []Artist `gorm:"many2many:album_artists;"`

    Name        string

    ReleaseDate time.Time

    GenreID     uint

    Genre       Genre

    Picture     string

}

由于专辑和艺术家是多对多的关系,您可以根据您的需要反向引用它检查here


艺人模特:


type Artist struct {

    gorm.Model

    Name        string

    Description string

    YearsActive string

}

流派型号:


type Genre struct {

    gorm.Model

    Name        string

    Description string

}

轨道型号:


type Track struct {

    gorm.Model

    AlbumID  uint

    Album    Album

    Name     string

    Artists  []Artist  `gorm:"many2many:track_artists;"`  // you may back reference this too

    Playtime time.Duration

}

现在你可以使用这个:


DB.Debug().AutoMigrate(&models.Genre{}, &models.Artist{}, &models.Album{}, &models.Track{})


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信