作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我具有以下结构
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/
我是一名优秀的程序员,十分优秀!