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

我想在我的模型中添加一些外键。我所做的与添加外键的文档完全相同。这些是模型


专辑型号:


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{})

我在这里做错了什么?我是外键概念的新手。我只想将曲目分别与他们的艺术家和专辑相关联。


慕桂英4014372
浏览 187回答 1
1回答

芜湖不芜

所以,问题是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{})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go