Allow override alias table in preload conditions
This commit is contained in:
		
							parent
							
								
									0f3201e73b
								
							
						
					
					
						commit
						3195ae1207
					
				| @ -50,7 +50,7 @@ func preload(db *gorm.DB, rels []*schema.Relationship, conds []interface{}) { | |||||||
| 
 | 
 | ||||||
| 		joinResults := rel.JoinTable.MakeSlice().Elem() | 		joinResults := rel.JoinTable.MakeSlice().Elem() | ||||||
| 		column, values := schema.ToQueryValues(rel.JoinTable.Table, joinForeignKeys, joinForeignValues) | 		column, values := schema.ToQueryValues(rel.JoinTable.Table, joinForeignKeys, joinForeignValues) | ||||||
| 		tx.Where(clause.IN{Column: column, Values: values}).Find(joinResults.Addr().Interface()) | 		db.AddError(tx.Where(clause.IN{Column: column, Values: values}).Find(joinResults.Addr().Interface()).Error) | ||||||
| 
 | 
 | ||||||
| 		// convert join identity map to relation identity map
 | 		// convert join identity map to relation identity map
 | ||||||
| 		fieldValues := make([]interface{}, len(joinForeignFields)) | 		fieldValues := make([]interface{}, len(joinForeignFields)) | ||||||
| @ -93,7 +93,7 @@ func preload(db *gorm.DB, rels []*schema.Relationship, conds []interface{}) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	reflectResults := rel.FieldSchema.MakeSlice().Elem() | 	reflectResults := rel.FieldSchema.MakeSlice().Elem() | ||||||
| 	column, values := schema.ToQueryValues(rel.FieldSchema.Table, relForeignKeys, foreignValues) | 	column, values := schema.ToQueryValues(clause.CurrentTable, relForeignKeys, foreignValues) | ||||||
| 
 | 
 | ||||||
| 	for _, cond := range conds { | 	for _, cond := range conds { | ||||||
| 		if fc, ok := cond.(func(*gorm.DB) *gorm.DB); ok { | 		if fc, ok := cond.(func(*gorm.DB) *gorm.DB); ok { | ||||||
| @ -103,7 +103,7 @@ func preload(db *gorm.DB, rels []*schema.Relationship, conds []interface{}) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	tx.Where(clause.IN{Column: column, Values: values}).Find(reflectResults.Addr().Interface(), inlineConds...) | 	db.AddError(tx.Where(clause.IN{Column: column, Values: values}).Find(reflectResults.Addr().Interface(), inlineConds...).Error) | ||||||
| 
 | 
 | ||||||
| 	fieldValues := make([]interface{}, len(relForeignFields)) | 	fieldValues := make([]interface{}, len(relForeignFields)) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ import ( | |||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
|  | 	"gorm.io/gorm" | ||||||
| 	"gorm.io/gorm/clause" | 	"gorm.io/gorm/clause" | ||||||
| 	. "gorm.io/gorm/utils/tests" | 	. "gorm.io/gorm/utils/tests" | ||||||
| ) | ) | ||||||
| @ -108,6 +109,20 @@ func TestPreloadWithConds(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	CheckUser(t, users2[0], users[0]) | 	CheckUser(t, users2[0], users[0]) | ||||||
|  | 
 | ||||||
|  | 	var users3 []User | ||||||
|  | 	if err := DB.Preload("Account", func(tx *gorm.DB) *gorm.DB { | ||||||
|  | 		return tx.Table("accounts AS a").Select("a.*") | ||||||
|  | 	}).Find(&users3, "id IN ?", userIDs).Error; err != nil { | ||||||
|  | 		t.Errorf("failed to query, got error %v", err) | ||||||
|  | 	} | ||||||
|  | 	sort.Slice(users3, func(i, j int) bool { | ||||||
|  | 		return users2[i].ID < users2[j].ID | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	for i, u := range users3 { | ||||||
|  | 		CheckUser(t, u, users[i]) | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestNestedPreloadWithConds(t *testing.T) { | func TestNestedPreloadWithConds(t *testing.T) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu