【问题标题】:Retrieving many to many results from gorm with condition从有条件的 gorm 中检索多对多结果
【发布时间】:2020-10-17 19:42:41
【问题描述】:

例如这是我的模型

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)

【问题讨论】:

  • 条件应与该模型一起在Preload() 中传递。 db.Preload("Languages", "Name = ?", whichName).Find(&users)
  • @HaiTH 当我这样做时,我收到此错误Error 1054: Unknown column 'users.name' in 'where clause'
  • @MoeinHosseini 再次检查您是否将条件放入预加载中。它对我有用。
  • @HaiTH db.Preload("Genres", "Slug = ?", genre) 这是我的实际代码。我的曲目可以有多种类型

标签: mysql go go-gorm


【解决方案1】:

您可以从语言预加载用户

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;"`
}

官方文档:Preload with conditions

【讨论】:

  • 此代码过滤每个用户的语言。我想根据可用语言过滤用户
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2011-02-15
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多