Merge pull request #1052 from stroborobo/fix-polymorphic-preload
Add support for polymorphic preload
This commit is contained in:
		
						commit
						09427a07b2
					
				@ -104,8 +104,15 @@ func (scope *Scope) handleHasOnePreload(field *Field, conditions []interface{})
 | 
				
			|||||||
	preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions)
 | 
						preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// find relations
 | 
						// find relations
 | 
				
			||||||
 | 
						query := fmt.Sprintf("%v IN (%v)", toQueryCondition(scope, relation.ForeignDBNames), toQueryMarks(primaryKeys))
 | 
				
			||||||
 | 
						values := toQueryValues(primaryKeys)
 | 
				
			||||||
 | 
						if relation.PolymorphicType != "" {
 | 
				
			||||||
 | 
							query += fmt.Sprintf(" AND %v = ?", scope.Quote(relation.PolymorphicDBName))
 | 
				
			||||||
 | 
							values = append(values, scope.TableName())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	results := makeSlice(field.Struct.Type)
 | 
						results := makeSlice(field.Struct.Type)
 | 
				
			||||||
	scope.Err(preloadDB.Where(fmt.Sprintf("%v IN (%v)", toQueryCondition(scope, relation.ForeignDBNames), toQueryMarks(primaryKeys)), toQueryValues(primaryKeys)...).Find(results, preloadConditions...).Error)
 | 
						scope.Err(preloadDB.Where(query, values...).Find(results, preloadConditions...).Error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// assign find results
 | 
						// assign find results
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
@ -143,8 +150,15 @@ func (scope *Scope) handleHasManyPreload(field *Field, conditions []interface{})
 | 
				
			|||||||
	preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions)
 | 
						preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// find relations
 | 
						// find relations
 | 
				
			||||||
 | 
						query := fmt.Sprintf("%v IN (%v)", toQueryCondition(scope, relation.ForeignDBNames), toQueryMarks(primaryKeys))
 | 
				
			||||||
 | 
						values := toQueryValues(primaryKeys)
 | 
				
			||||||
 | 
						if relation.PolymorphicType != "" {
 | 
				
			||||||
 | 
							query += fmt.Sprintf(" AND %v = ?", scope.Quote(relation.PolymorphicDBName))
 | 
				
			||||||
 | 
							values = append(values, scope.TableName())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	results := makeSlice(field.Struct.Type)
 | 
						results := makeSlice(field.Struct.Type)
 | 
				
			||||||
	scope.Err(preloadDB.Where(fmt.Sprintf("%v IN (%v)", toQueryCondition(scope, relation.ForeignDBNames), toQueryMarks(primaryKeys)), toQueryValues(primaryKeys)...).Find(results, preloadConditions...).Error)
 | 
						scope.Err(preloadDB.Where(query, values...).Find(results, preloadConditions...).Error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// assign find results
 | 
						// assign find results
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user