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

gorm: define a valid foreign key for relations or implement the Valuer/Scanner interface

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

专辑型号:

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

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

所以,问题是 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
}

由于专辑和艺术家是many-to-many关系,您可以back-reference根据您的需要check 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{})