英文:
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"`
}
我在这里准备了一个示例 链接。
如果我有一个包含 tag1
和 tag2
的标签数组,我想在 &gifs
中获取 gif1
和 gif2
。
我已经多次阅读了文档,并且只找到了与我的问题相反的内容,即获取给定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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论