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.
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)