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

Go语言中如何使用Gorm结合Preload与Where过滤关联数据

解决Gorm中结合Preload与Where查询类别ID为1的事件问题

你的原代码问题在于直接使用events.categories.id作为Where条件,Gorm无法识别这种跨表字段写法,以下是两种正确的实现方式:

方式一:通过事件模型的关联字段过滤(推荐)

如果你的Event结构体定义了CategoryID字段(一对一关联的外键),直接过滤该字段即可,同时用Preload预加载关联的类别信息:

var events []Event
Db.Preload("Category").Where("category_id = ?", 1).Find(&events)

方式二:使用Joins关联查询(适合复杂关联场景)

通过JOIN语句关联categories表,再过滤类别ID,确保只获取关联类别为1的事件:

var events []Event
Db.Joins("JOIN categories ON categories.id = events.category_id").
    Where("categories.id = ?", 1).
    Preload("Category").
    Find(&events)

补充:仅预加载符合条件的关联数据

如果你的需求是保留所有事件,但仅预加载其中ID为1的类别数据(而非过滤事件本身),可以在Preload中添加条件:

var events []Event
Db.Preload("Category", "id = ?", 1).Find(&events)

内容的提问来源于stack exchange,提问作者iwasaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:25:19