Allow to skip associations when creating join table for many2many, close #3605
This commit is contained in:
		
							parent
							
								
									694e42d6a1
								
							
						
					
					
						commit
						50df9da6a1
					
				| @ -291,7 +291,9 @@ func SaveAfterAssociations(db *gorm.DB) { | |||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if elems.Len() > 0 { | 			if elems.Len() > 0 { | ||||||
| 				db.AddError(db.Session(&gorm.Session{NewDB: true}).Clauses(onConflictOption(db.Statement, rel.FieldSchema, nil)).Create(elems.Interface()).Error) | 				if v, ok := selectColumns[rel.Name+".*"]; !ok || v { | ||||||
|  | 					db.AddError(db.Session(&gorm.Session{NewDB: true}).Clauses(onConflictOption(db.Statement, rel.FieldSchema, nil)).Create(elems.Interface()).Error) | ||||||
|  | 				} | ||||||
| 
 | 
 | ||||||
| 				for i := 0; i < elems.Len(); i++ { | 				for i := 0; i < elems.Len(); i++ { | ||||||
| 					appendToJoins(objs[i], elems.Index(i)) | 					appendToJoins(objs[i], elems.Index(i)) | ||||||
|  | |||||||
| @ -93,6 +93,28 @@ func TestMany2ManyAssociation(t *testing.T) { | |||||||
| 	AssertAssociationCount(t, user2, "Languages", 0, "after clear") | 	AssertAssociationCount(t, user2, "Languages", 0, "after clear") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestMany2ManyOmitAssociations(t *testing.T) { | ||||||
|  | 	var user = *GetUser("many2many_omit_associations", Config{Languages: 2}) | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Omit("Languages.*").Create(&user).Error; err == nil { | ||||||
|  | 		t.Fatalf("should raise error when create users without languages reference") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Create(&user.Languages).Error; err != nil { | ||||||
|  | 		t.Fatalf("no error should happen when create languages, but got %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Omit("Languages.*").Create(&user).Error; err != nil { | ||||||
|  | 		t.Fatalf("no error should happen when create user when languages exists, but got %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Find
 | ||||||
|  | 	var languages []Language | ||||||
|  | 	if DB.Model(&user).Association("Languages").Find(&languages); len(languages) != 2 { | ||||||
|  | 		t.Errorf("languages count should be %v, but got %v", 2, len(languages)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestMany2ManyAssociationForSlice(t *testing.T) { | func TestMany2ManyAssociationForSlice(t *testing.T) { | ||||||
| 	var users = []User{ | 	var users = []User{ | ||||||
| 		*GetUser("slice-many2many-1", Config{Languages: 2}), | 		*GetUser("slice-many2many-1", Config{Languages: 2}), | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu