如何使用GORM查询满足过滤条件的多对多关联数据
解决方案
以下是两种可直接使用的实现方式:
方案1:使用GORM关联查询(最简单)
直接基于你已经查询到的Asset对象,加载关联的CommandQuery时添加过滤条件即可:
var validCommands []*CommandQuery // 过滤关联对象中active为true的记录 err := db.Model(&result).Where("active = ?", true).Association("CommandQueries").Find(&validCommands) if err != nil { // 自行处理查询错误 }
方案2:手动联表查询
如果需要更灵活的条件控制,可以直接关联多对多中间表查询:
var validCommands []*CommandQuery err := db.Joins("JOIN command_asset ca ON ca.command_query_id = command_queries.id"). Where("ca.asset_id = ?", result.Id). Where("command_queries.active = ?", true). Find(&validCommands).Error if err != nil { // 自行处理查询错误 }
注意事项
- GORM默认将结构体名转为蛇形复数作为表名,
CommandQuery对应的默认表名为command_queries,如果你自定义了表名需要对应修改SQL语句中的表名 - 如果你需要同时获取
CommandQuery关联的其他数据,可以在查询链上添加Preload方法加载对应关联字段
内容的提问来源于stack exchange,提问作者Jean-Pierre GARNIER
相关产品推荐
相关产品推荐

