如何查询关联模型中嵌入结构体值匹配特定条件的Type模型?
解决方案
在GORM中,直接通过嵌套结构体Type{Car: Car{Post: Post{Published: true}}}作为Where条件无法生效,原因是GORM不会自动关联关联表来解析嵌套的关联模型字段条件,只会处理当前主表(Type)的字段。要实现需求,需要先关联Car表,再筛选对应字段,以下是两种无需原生SQL构建器的实现方式:
方法一:通过Joins关联Car表,结合结构体条件筛选
先通过Joins("Car")关联Car表,再用Car结构体作为筛选条件,GORM会自动将条件应用到关联的Car表上:
var targetTypes []Type db.Joins("Car").Where(Car{Post: Post{Published: true}}).Preload("Car").Find(&targetTypes)
方法二:通过Joins关联Car表,结合字段路径字符串筛选
如果明确字段对应的数据库列名,可以直接用字符串指定筛选条件(需注意数据库列名要和GORM生成的一致,比如嵌入的Post.Published字段默认会被命名为post_published):
var targetTypes []Type db.Joins("Car").Where("cars.post_published = ?", true).Preload("Car").Find(&targetTypes)
关键说明
Joins("Car")的作用是在查询Type时关联Car表,让GORM能够识别针对Car表的筛选条件;Preload("Car")用于预加载符合条件的Type对应的Car数据,避免N+1查询问题。
内容的提问来源于stack exchange,提问作者elJeffe
相关产品推荐
相关产品推荐

