package gorm_test import ( "fmt" "os" "testing" ) type Blog struct { ID uint `gorm:"primary_key"` Locale string `gorm:"primary_key"` Subject string Body string Tags []Tag `gorm:"many2many:blog_tags;"` } type Tag struct { ID uint `gorm:"primary_key"` Locale string `gorm:"primary_key"` Value string } func TestManyToManyWithMultiPrimaryKeys(t *testing.T) { if dialect := os.Getenv("GORM_DIALECT"); dialect != "sqlite" { DB.Exec(fmt.Sprintf("drop table blog_tags;")) DB.AutoMigrate(&Blog{}, &Tag{}) blog := Blog{ Locale: "ZH", Subject: "subject", Body: "body", Tags: []Tag{ {Locale: "ZH", Value: "tag1"}, {Locale: "ZH", Value: "tag2"}, }, } DB.Save(&blog) DB.Model(&blog).Association("Tags").Append([]Tag{{Locale: "ZH", Value: "tag3"}}) var tags []Tag DB.Model(&blog).Related(&tags, "Tags") if len(tags) != 3 { t.Errorf("should found 3 tags with blog") } } }