diff --git a/gorm.go b/gorm.go index aca7cb5e..d961b79d 100644 --- a/gorm.go +++ b/gorm.go @@ -16,6 +16,15 @@ import ( // for Config.cacheStore store PreparedStmtDB key const preparedStmtDBKey = "preparedStmt" +// M is a convenient alias for a map[string]interface{} map, useful for +// dealing with GORM in a native way. For instance: +// +// gorm.M{"a": 1, "b": true} +// +// There's no special handling for this type in addition to what's done anyway +// for an equivalent map type. +type M = map[string]interface{} + // Config GORM config type Config struct { // GORM perform single create, update, delete operations in transactions by default to ensure database data integrity diff --git a/tests/create_test.go b/tests/create_test.go index 2b23d440..17de6488 100644 --- a/tests/create_test.go +++ b/tests/create_test.go @@ -136,6 +136,25 @@ func TestCreateFromMap(t *testing.T) { if err := DB.Where("name = ?", "create_from_map_3").First(&result3).Error; err != nil || result3.Age != 20 { t.Fatalf("failed to query data after create from slice of map, got error %v", err) } + + datas2 := []gorm.M{ + {"Name": "create_from_M_1", "Age": 21}, + {"name": "create_from_M_2", "Age": 22}, + } + + if err := DB.Model(&User{}).Create(&datas2).Error; err != nil { + t.Fatalf("failed to create data from slice of map, got error: %v", err) + } + + var result4 User + if err := DB.Where("name = ?", "create_from_M_1").First(&result4).Error; err != nil || result4.Age != 21 { + t.Fatalf("failed to query data after create from slice of map, got error %v", err) + } + + var result5 User + if err := DB.Where("name = ?", "create_from_M_2").First(&result5).Error; err != nil || result5.Age != 22 { + t.Fatalf("failed to query data after create from slice of map, got error %v", err) + } } func TestCreateWithAssociations(t *testing.T) {