mirror of https://github.com/go-gorm/gorm.git
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…
Reference in New Issue