diff --git a/callback_query_preload.go b/callback_query_preload.go index a4b1cf1f..4d2678bd 100644 --- a/callback_query_preload.go +++ b/callback_query_preload.go @@ -104,8 +104,15 @@ func (scope *Scope) handleHasOnePreload(field *Field, conditions []interface{}) preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions) // 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) - 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 var ( @@ -143,8 +150,15 @@ func (scope *Scope) handleHasManyPreload(field *Field, conditions []interface{}) preloadDB, preloadConditions := scope.generatePreloadDBWithConditions(conditions) // 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) - 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 var (