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