Your Question
[0.563ms] [rows:0] SELECT languages.code,languages.name FROM languages JOIN user_speaks ON user_speaks.language_code = languages.code AND user_speaks.user2_id IN (NULL) WHERE code IN ('EN','CN')
Association Problem, anomaly. Where is the user_speaks.user2_id IN (NULL) from? Can I overwrite the condition?
type Language struct {
Code string gorm:"primarykey"
Name string
}
type User2 struct {
gorm.Model
Name string
Languages []Language gorm:"many2many:user_speaks;"
}
db.AutoMigrate(&Language{}, &User2{})
user2 := User2{
Name: "jinzhu",
Languages: []Language{
{
Code: "EN",
Name: "ENG",
},
{
Code: "CN",
Name: "CHN",
},
},
}
db.Debug().Create(&user2)
var user3 User2
codes := []string{"EN", "CN"}
var langs []Language
res2 := db.Debug().Model(&user3).Where("code IN ?", codes).Association("Languages").Find(&langs)
The document you expected this should be explained
Expected answer
Comment From: ophum
@losywee
Is this what you want to do?
var user3 User2
user3.ID = 1
codes := []string{"EN", "CN"}
var langs []Language
res2 := db.Debug().Model(&user3).Where("code IN ?", codes).Association("Languages").Find(&langs)
[0.158ms] [rows:2] SELECT `languages`.`code`,`languages`.`name` FROM `languages` JOIN `user_speaks` ON `user_speaks`.`language_code` = `languages`.`code` AND `user_speaks`.`user2_id` = 1 WHERE code IN ("EN","CN")