github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/mysql/db_table.go (about) 1 package mysql 2 3 import ( 4 "reflect" 5 6 "github.com/sirupsen/logrus" 7 8 "github.com/artisanhe/gorm" 9 10 "github.com/artisanhe/tools/env" 11 ) 12 13 type Model interface { 14 TableName() string 15 } 16 17 func NewDBTable() *DBTable { 18 return &DBTable{} 19 } 20 21 type DBTable struct { 22 Name string 23 list []Model 24 } 25 26 func (dbTable *DBTable) SetName(name string) { 27 dbTable.Name = name 28 } 29 30 func (dbTable *DBTable) Register(model Model) { 31 rv := reflect.ValueOf(model) 32 if rv.Elem().Kind() != reflect.Struct || rv.Kind() != reflect.Ptr || rv.IsNil() { 33 panic("register model failed") 34 } 35 dbTable.list = append(dbTable.list, model) 36 } 37 38 func (dbTable *DBTable) AutoMigrate(db *gorm.DB) (err error) { 39 goEnv := env.GetRuntimeEnv() 40 41 if goEnv == env.ONLINE || goEnv == env.PRE { 42 // nothing 43 //return nil 44 } 45 46 for _, model := range dbTable.list { 47 err := db.AutoMigrate(model).Error 48 if err != nil { 49 logrus.Errorf("%s automigrate error[%s]", model, err.Error()) 50 } 51 } 52 53 return nil 54 }