gpt4 book ai didi

go - 如何在多对多字段上搜索

转载 作者:行者123 更新时间:2023-12-03 10:09:08 25 4
gpt4 key购买 nike

假设我具有以下结构

type Job struct {
ID string `sql:"type:uuid;primary_key;"`
Title string `json:"title,omitempty"`
Skills []*skill.Skill `json:"skills,omitempty"gorm:"many2many:job_skill;"`
}

type Skill struct {
Name string `json:"name" gorm:"primary_key"`
}
要查询我所做的所有工作:
jobs := &[]Job{}
gorm.DB.Preload("Skills").Find(&jobs)
如何搜索包含特定技能的 Job?我在下面尝试过,但它说该列不存在。
s := "golang"
jobs := &[]Job{}

gorm.DB.Preload("Skills").Where("skill = ?", s).Find(&jobs)
我可以看到我的问题, =似乎不是正确的运算符,因为它需要在列表中进行搜索。而且它也没有像我想象的那样加载联接表
调试输出
pq: column "skill" does not exist
SELECT * FROM "jobs" WHERE skill = 'golang'

最佳答案

Preload方法和Associations功能可根据已创建的关系构造基本的SQL查询,从而帮助您加载字段。查询喜欢加载特定职位(或多个职位)的所有技能。但这没有比这更复杂的了。
而是将go-gorm视为构造SQL查询并将数据加载到模型中的一种方法。
考虑到这一点,一种解决方案是使用Joins包括skill表。

gorm.DB.Preload("Skills")
.Joins("INNER JOIN job_skill js ON js.job_id = jobs.id").
.Joins("INNER JOIN skill s ON s.id = js.skill_id").
.Where("s.name = ?", s).Find(&jobs)

关于go - 如何在多对多字段上搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66007278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com