diff --git a/callbacks/query.go b/callbacks/query.go index 0cfb0b3f..c04ba8bb 100644 --- a/callbacks/query.go +++ b/callbacks/query.go @@ -186,6 +186,9 @@ func BuildQuerySQL(db *gorm.DB) { } func Preload(db *gorm.DB) { + if db.Statement.Schema == nil { + return + } if db.Error == nil && len(db.Statement.Preloads) > 0 { preloadMap := map[string]map[string][]interface{}{} for name := range db.Statement.Preloads { diff --git a/tests/count_test.go b/tests/count_test.go index de06d0eb..9dcd9a1f 100644 --- a/tests/count_test.go +++ b/tests/count_test.go @@ -133,5 +133,12 @@ func TestCount(t *testing.T) { if err := DB.Model(&User{}).Select("*").Where("name in ?", []string{user1.Name, user2.Name, user3.Name}).Count(&count10).Error; err != nil || count10 != 3 { t.Fatalf("Count should be 3, but got count: %v err %v", count10, err) } - + var count11 int64 + if err := DB.Table("users"). + Where("name in ?", []string{user1.Name, user2.Name, user3.Name}). + Preload("Toys", func(db *gorm.DB) *gorm.DB { + return db.Table("toys").Select("name") + }).Count(&count11).Limit(2).Find(&users).Error; err != nil || count11 != 3 || len(users) !=2 { + t.Fatalf("Count should be 3,len should be 2, but got count: %v len %v err %v", count11,len(users), err) + } }