如何使用gorm有条件地搜索具有多对多关系的数据
我正在开发一个使用gorm管理报价的应用程序。 引号有多个标记。 当指定多个标记时,我希望获得包含所有指定标记的引号 这是我的数据模型如何使用gorm有条件地搜索具有多对多关系的数据,go,go-gorm,Go,Go Gorm,我正在开发一个使用gorm管理报价的应用程序。 引号有多个标记。 当指定多个标记时,我希望获得包含所有指定标记的引号 这是我的数据模型 type Quote struct { ID uint `gorm:"primary_key" json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:&qu
type Quote struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Text string `json:"text"`
Page uint `json:"page"`
ISBN string `json:"isbn"`
Tags []Tag `gorm:"many2many:quote_tags;" json:"tags"`
}
type Tag struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
Name string `json:"name"`
}
我想做这样的事。语法不正确
db.Preload("Tags").Where(<quotes.tags.name contains all tagNames>).Find("es) // tagNames []string
有没有办法让戈姆做到这一点?
提前感谢您。在这种情况下,您需要做的是首先找出您需要运行的SQL的外观 要获取与所有给定标记匹配的所有引号,您需要将quotes表连接到一个子查询,该子查询计算每个引号匹配的标记数,如下所示: 选择* 引述 参加 选择quote_id,count*作为count 来自quote_tags qt JOIN tags t ON qt.tag_id=t.id 其中t.name在“tag1”、“tag2”、“tag4”中 按报价单分组\u id 与quote上的匹配_id=quotes.id和matched.count=3 一旦你做到了,你就试着用Gorm说: requiredTags:=[]字符串{tag1,tag2,tag3} db.preload标签。 加入 在quote_id=quotes.id和matched.count=?,作为匹配的联接?, db.Selectquote\u id,count*作为count。 表QUOTE_标签qt。 JoinsJOIN在qt.tag_id=t.id上标记t。 其中,t.name IN,requiredTags。 集团报价(id), lenrequiredTags, . 查找和引用
请参阅:我遇到了这个错误。请求失败:sql:转换参数$1类型:不支持的类型gorm.DB,结构[]sql和子查询正常工作,因此我认为将子查询分配给JOIN子句时出现问题。您使用的是哪个版本的gorm?确保它是最新的稳定版本,或者至少>1.20,相当于>2.0I使用的是旧版本的gorm。我从github.com/jinchu/gorm v1.9.16更新到gorm.io/gorm v1.21.9,上述错误消失了。谢谢你的回答!