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

如何在GORM中预加载并筛选出拥有指定名称Account的Person记录

解决GORM中筛选拥有指定关联Account的Person记录问题

要筛选出拥有名称为foo的Account的Person记录,你之前使用的Preload仅对关联的Account做条件加载,并不会过滤Person本身,需要通过**关联表查询(Joins)**来实现核心筛选逻辑:

基础筛选方案

通过Joins关联accounts表,结合Where条件锁定符合要求的Person,同时用Distinct避免因一个Person存在多个符合条件的Account而产生重复记录:

var personList []Person
DB.Joins("JOIN accounts ON accounts.person_id = persons.id").
    Where("accounts.name = ?", "foo").
    Distinct().
    Find(&personList)

同时预加载符合条件的Accounts

如果需要同步加载这些Person对应的名称为foo的Accounts,可以在上述逻辑基础上追加Preload:

var personList []Person
DB.Joins("JOIN accounts ON accounts.person_id = persons.id").
    Where("accounts.name = ?", "foo").
    Distinct().
    Preload("Accounts", "name = ?", "foo").
    Find(&personList)

模型定义补充提示

你的模型需要包含主键字段,否则GORM无法正确处理关联关系,建议补充主键定义:

type Person struct {
    ID       string    `gorm:"primaryKey"`
    Accounts []Account
}

type Account struct {
    ID       string `gorm:"primaryKey"`
    Name     string
    PersonID string
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:00:46