我想在 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
}
由于专辑和艺术家是多对多的关系,您可以根据需要反向引用在这里查看
艺人模特:
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{})
检查您是否为父表和子表正确添加了 ID 或任何其他字段
primary key
。