首页 > 解决方案 > 从有条件的 gorm 中检索多对多结果

问题描述

例如这是我的模型

type User struct {
  gorm.Model
  Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
}

我想获得有英语的用户。如何设置条件?我已经尝试过了,但它不起作用:

db.Preload("Languages").Where("Language.Name = ?", conditionVal).Find(&users)

标签: mysqlgogo-gorm

解决方案


您可以从语言预加载用户

language := Language{}
db.Where("Name = ?", langVal).Preload("Users").Find(&language)
users := language.Users

您的模型也需要反向引用

type User struct {
    gorm.Model
    Languages []*Language `gorm:"many2many:user_languages;"`
}

type Language struct {
    gorm.Model
    Name  string
    Users []*User `gorm:"many2many:user_languages;"`
}

官方文档:预加载条件


推荐阅读