Golang GORM 多对多反向引用

huangapple go评论89阅读模式
英文:

golang gorm many to many back reference

问题

我有这些模型,是多对多的关系,并且我想获取与一组标签匹配的所有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"`
}

我在这里准备了一个示例 链接

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

我已经多次阅读了文档,并且只找到了与我的问题相反的内容,即获取给定gif的标签。

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

英文:

I have this models, many-to-many, and I'd like to get all the Gifs that matches a list of Tags.

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"`
}

I prepared a playground here.

If I have an array of Tags containing tag1 and tag2, I'd like to get gif1 and gif2 in &gifs.

I read the documentation many times and found only the opposite of my question, i.e. fetching the tags for a given gif.

Do I need to change my models?
Is it possible to set up two Associations fields in a many-to-many relation?

答案1

得分: 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,反之亦然。

英文:

So I found how to add back-reference.
I created two files in the same package containing the models, and added Associations with the same join-table for the 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"`
}

and 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"`
}

They need to be in separate files.

Now I can access easily all the gifs matching a Tag and vice-versa.

huangapple
  • 本文由 发表于 2017年1月22日 17:52:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/41789498.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定