登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-11 13:24:41 145浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《gorm:为关系定义有效的外键或实现 Valuer/Scanner 接口》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我想在 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 知道结构之间的连接是什么。 p>

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

专辑型号:

type album struct {
    gorm.model
    artists     []artist `gorm:"many2many:album_artists;"`
    name        string
    releasedate time.time
    genreid     uint
    genre       genre
    picture     string
}

由于专辑和艺术家是多对多的关系,您可以根据需要反向引用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{})

本篇关于《gorm:为关系定义有效的外键或实现 Valuer/Scanner 接口》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>