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

Gorm多对多关联查询:如何按服务名称关键词筛选资源?

使用Gorm结合Preload和Where查询关联服务名称含关键词的资源

首先需要明确实体的模型关联结构,假设你的实体定义大致如下(结合常见的关联关系推断):

// Service 服务实体
type Service struct {
    gorm.Model
    Name string // 服务名称
    // 若一个服务对应多个资源,添加该关联字段
    Resources []Resource `gorm:"foreignKey:ServiceID"`
}

// Resource 资源实体
type Resource struct {
    gorm.Model
    Name     string // 资源名称
    ServiceID uint   // 关联服务的ID
    Service   Service `gorm:"foreignKey:ServiceID"` // 关联的服务实体
}

根据不同的查询需求,有两种实现方式:

场景1:筛选出关联服务名称匹配关键词的资源,并预加载对应服务

如果需要只返回关联服务名称包含指定关键词的资源,同时预加载匹配的服务,可通过Joins关联表后添加筛选条件,再结合Preload:

var resources []Resource
keyword := "目标关键词"

// 内连接Service表筛选符合条件的资源,同时预加载关联的服务数据
db.Joins("Service").Where("services.name LIKE ?", "%"+keyword+"%").Preload("Service").Find(&resources)
  • Joins("Service")会执行内连接,仅返回存在匹配服务的资源;
  • Preload("Service")会批量查询关联的服务数据,避免N+1查询问题,确保Resource对象的Service字段被正确填充。

场景2:查询所有资源,但仅预加载名称匹配关键词的关联服务

如果需要返回全部资源,但仅给符合条件的资源预加载匹配的服务(不匹配的资源其Service字段为空),可以直接给Preload添加筛选条件:

var resources []Resource
keyword := "目标关键词"

// 预加载时仅筛选名称包含关键词的服务
db.Preload("Service", "name LIKE ?", "%"+keyword+"%").Find(&resources)

注意事项

  • 确保模型的关联标签(如foreignKey)配置正确,Gorm才能识别关联关系;
  • LIKE查询的通配符可按需调整:%keyword%表示包含关键词,keyword%表示以关键词开头,%keyword表示以关键词结尾;
  • 若为多对多关联,需调整Joins的关联逻辑,通过中间表完成连接。

内容的提问来源于stack exchange,提问作者Barış Kılıç

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:35:30