type AbcMenu struct { basedto.BaseEntity `gorm:"-"` *basemodel.BaseModel /* */ Id int64 `gorm:"column:id;type:INT8;PRIMARY_KEY;default:unique_rowid()" json:"id"` /* */ WebsiteId int64 `gorm:"column:website_id;type:INT8" json:"website_id"` /* */ Keyword string `gorm:"column:keyword;type:STRING" json:"keyword"` } // 指定表名 // InsertIfNotExists func (this *TestQueryRequest) Test114_automigrate_defineTablename() { var req = pagereq.NewQueryRequest() req.GetDB().Table("abc").AutoMigrate(AbcMenu{}) } // 默认表名struct名 func (this *TestQueryRequest) Test115_automigrate_defineTablenameAuto() { var req = pagereq.NewQueryRequest() req.GetDB().AutoMigrate(AbcMenu{}) } // tabler接口定义 func (this *TestQueryRequest) Test116_automigrate_interfacedefineTablename() { var req = pagereq.NewQueryRequest() req.GetDB().AutoMigrate(AbcMenu{}) }
func (self AbcMenu) TableName() string { return "abc_menu1" }
// 动态结构体 func (this *TestHttpCliQuerySuite) Test118_automigrate() { var req = pagedb.DefaultDbGroup() req.SetTableName("service_api_list") var r, _ = req.CreateTableRecord() req.GetDB().Table("abc23").AutoMigrate(r) }
func (self *PagedbGroup) CreateTableRecord() (any, error) { var entity, err = self.CreateTableStru() if err != nil { return nil, err } var r = entity.Addr().Interface() return r, err } func (self *PagedbGroup) CreateTableStru() (reflect.Value, error) { var metadata = self.metadataFactroy.FindMetaTable(self.TableName) if !metadata.TableExist { return reflect.ValueOf(nil), errors.New("table not exist") } return self.CreateDbTableStru(metadata), nil } func (self *PagedbGroup) CreateDbTableStru(meta *dbpkgdto.MetaTableDto) reflect.Value { var metaColService = self.metadataFactroy //service.FindMetadataFactroy(self.DbClientDto) dbFields := []reflect.StructField{} var colField = reflect.StructField{ Name: "BaseEntity", Type: reflect.TypeOf(basedto.BaseEntity{}), Tag: `json:"-"`, Anonymous: true, } dbFields = append(dbFields, colField) for _, col := range meta.Columns { var colType = metaColService.FindGoType(col.DataType) var ColTyp8 = reflect.TypeOf(int8(0)) var ct = func(colType string) *reflect.Type { var ColTyp = reflect.TypeOf(int8(0)) switch colType { case "float32": ColTyp = reflect.TypeOf(float32(0)) case "float64": ColTyp = reflect.TypeOf(float64(0)) case "int64": ColTyp = reflect.TypeOf(int64(0)) case "int32": ColTyp = reflect.TypeOf(int32(0)) case "int16": ColTyp = reflect.TypeOf(int16(0)) case "uint64": ColTyp = reflect.TypeOf(uint64(0)) case "uint32": ColTyp = reflect.TypeOf(uint32(0)) case "uint16": ColTyp = reflect.TypeOf(uint16(0)) case "string": ColTyp = reflect.TypeOf("") case "bool": ColTyp = reflect.TypeOf(true) case "byte": ColTyp = reflect.TypeOf(byte(0)) case "[]byte": ColTyp = reflect.TypeOf([]byte{}) case "time.Time": ColTyp = reflect.TypeOf(time.Now()) if col.ColumnName == "deleted_at" { var t *time.Time ColTyp = reflect.TypeOf(t) } } return &ColTyp }(colType) if ColTyp8 != *ct { if self.IfExistField(col.ColumnName) { var name = stringutils.Case2Camel(col.ColumnName) name = strings.ReplaceAll(name, ",", "") var colField = reflect.StructField{ Name: name, Type: *ct, Tag: reflect.StructTag(fmt.Sprintf("json:\"%s\"", col.ColumnName)), } //or primary key if col.ColumnName == "id" && col.DataType == "int8" { colField.Tag = reflect.StructTag(`gorm:"column:id;type:INT8;PRIMARY_KEY;default:unique_rowid()" json:"id"`) } else if self.FindPkName() == col.ColumnName { colField.Tag = reflect.StructTag(strings.ReplaceAll(`gorm:"column:id;type:INT8;PRIMARY_KEY" json:"`+col.ColumnName+`"`, "id", col.ColumnName)) } dbFields = append(dbFields, colField) } } } dbtableType := reflect.StructOf(dbFields) return reflect.New(dbtableType).Elem() }