【问题标题】:golang gorm many to many back referencegolang gorm 多对多回溯参考
【发布时间】:2017-06-06 23:14:08
【问题描述】:

我有这个模型,多对多,我想获取与标签列表匹配的所有 Gif。

type Tag struct {
    ID      uint    `gorm:"primary_key" json:"id,omitempty"`
    Name    string  `gorm:"not null;unique" json:"name,omitempty"`
}
type Gif struct {
    ID      uint    `gorm:"primary_key" json:"id,omitempty"`
    Url     string `gorm:"not null;unique" json:"url,omitempty"`
    Tags    []Tag `gorm:"many2many:gif_tags;" json:"tags,omitempty"`
}

我准备了一个游乐场here

如果我有一个包含tag1tag2 的标签数组,我想在&gifs 中获得gif1gif2

我多次阅读文档,发现与我的问题相反,即获取给定 gif 的标签。

我需要更换模型吗?
是否可以在多对多关系中设置两个 Associations 字段?

【问题讨论】:

  • 请让您的游乐场可用,并在您需要修复的部分附近放置一个 cmets。现在它充满了错误。
  • 由于外部导入,操场无法工作。我更新了链接。如果您在计算机上运行它,它现在可以正常工作。我在需要帮助的地方添加了评论。
  • hmmm... 看起来 Go-GORM 没有反向引用支持。所以你应该切换模型并在Tag中声明引用。
  • 感谢您的回答!所以你认为没有办法在两个模型中放置相同的关联?

标签: sql go many-to-many go-gorm


【解决方案1】:

所以我找到了如何添加反向引用。
我在包含模型的同一个包中创建了两个文件,并为 many2many 添加了具有相同连接表的关联。

tag.go

type Tag struct {
    ID   uint   `gorm:"primary_key" json:"id,omitempty"`
    Name string `gorm:"not null;unique" json:"name,omitempty"`
    Gifs []Gif  `gorm:"many2many:gif_tags;" json:"gifs,omitempty"`
}

gif.go

type Gif struct {
    ID   uint   `gorm:"primary_key" json:"id,omitempty"`
    Url  string `gorm:"not null;unique" json:"url,omitempty"`
    Tags []Tag  `gorm:"many2many:gif_tags;" json:"tags,omitempty"`
}

它们需要位于不同的文件中。

现在我可以轻松访问与标签匹配的所有 gif,反之亦然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2021-10-27
    • 1970-01-01
    • 2020-11-16
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多