Search code examples
postgresqlgomany-to-manygo-gorm

How to do many-to-many Find query


I have two structs with a many-to-many relation like this:

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

type Language struct {
  gorm.Model
  Name string
}

I want to find users who have specified language. something like this:

var users []User
var lang = Language <-- this is the specified language
db.Model(&user).Association("Languages").Where("id = ? ", lang.ID).Find(&users)

but this format is not allowed.


Solution

  • I found the solution myself. for finding Users who have specified language must use Back-Reference like this:

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

    and the query will be in this form:

    var users []User
    var lang = Language <-- this is the specified language
    db.Model(&lang).Association("Users").Find(&users)