You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询关联模型中嵌入结构体值匹配特定条件的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:05:19