support foreign key.添加 外键支持
This commit is contained in:
@@ -7,15 +7,26 @@ import (
|
||||
"github.com/xxjwxc/gormt/data/view/genstruct"
|
||||
)
|
||||
|
||||
type _Model struct {
|
||||
info DBInfo
|
||||
}
|
||||
|
||||
// Generate build code string.生成代码
|
||||
func Generate(info DBInfo) string {
|
||||
m := _Model{
|
||||
info: info,
|
||||
}
|
||||
return m.generate()
|
||||
}
|
||||
|
||||
func (m *_Model) generate() string {
|
||||
var pkg genstruct.GenPackage
|
||||
pkg.SetPackage(info.PackageName) //package name
|
||||
for _, tab := range info.TabList {
|
||||
pkg.SetPackage(m.info.PackageName) //package name
|
||||
for _, tab := range m.info.TabList {
|
||||
var sct genstruct.GenStruct
|
||||
sct.SetStructName(getCamelName(tab.Name)) // Big hump.大驼峰
|
||||
sct.SetNotes(tab.Notes)
|
||||
sct.AddElement(getTableElement(tab.Em)...) // build element.构造元素
|
||||
sct.AddElement(m.genTableElement(tab.Em)...) // build element.构造元素
|
||||
sct.SetCreatTableStr(tab.SQLBuildStr)
|
||||
pkg.AddStruct(sct)
|
||||
}
|
||||
@@ -23,9 +34,9 @@ func Generate(info DBInfo) string {
|
||||
return pkg.Generate()
|
||||
}
|
||||
|
||||
// getTableElement Get table columns and comments.获取表列及注释
|
||||
func getTableElement(tabs []ColumusInfo) (el []genstruct.GenElement) {
|
||||
for _, v := range tabs {
|
||||
// genTableElement Get table columns and comments.获取表列及注释
|
||||
func (m *_Model) genTableElement(cols []ColumusInfo) (el []genstruct.GenElement) {
|
||||
for _, v := range cols {
|
||||
var tmp genstruct.GenElement
|
||||
if strings.EqualFold(v.Type, "gorm.Model") { // gorm model
|
||||
tmp.SetType(v.Type) //
|
||||
@@ -74,7 +85,91 @@ func getTableElement(tabs []ColumusInfo) (el []genstruct.GenElement) {
|
||||
}
|
||||
}
|
||||
el = append(el, tmp)
|
||||
|
||||
// ForeignKey
|
||||
if config.GetIsForeignKey() && len(v.ForeignKeyList) > 0 {
|
||||
fklist := m.genForeignKey(v)
|
||||
if len(fklist) > 0 {
|
||||
el = append(el, fklist...)
|
||||
}
|
||||
}
|
||||
// -----------end
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// genForeignKey Get information about foreign key of table column.获取表列外键相关信息
|
||||
func (m *_Model) genForeignKey(col ColumusInfo) (fklist []genstruct.GenElement) {
|
||||
for _, v := range col.ForeignKeyList {
|
||||
isMulti, isFind, notes := m.getColumusKeyMulti(v.TableName, v.ColumnName)
|
||||
if isFind {
|
||||
var tmp genstruct.GenElement
|
||||
tmp.SetNotes(notes)
|
||||
if isMulti {
|
||||
tmp.SetName(getCamelName(v.TableName) + "List")
|
||||
tmp.SetType("[]" + getCamelName(v.TableName))
|
||||
} else {
|
||||
tmp.SetName(getCamelName(v.TableName))
|
||||
tmp.SetType(getCamelName(v.TableName))
|
||||
}
|
||||
|
||||
tmp.AddTag(_tagGorm, "association_foreignkey:"+col.Name)
|
||||
tmp.AddTag(_tagGorm, "foreignkey:"+v.ColumnName)
|
||||
|
||||
// json tag
|
||||
if config.GetIsJSONTag() {
|
||||
tmp.AddTag(_tagJSON, v.TableName+"_list")
|
||||
}
|
||||
|
||||
fklist = append(fklist, tmp)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (m *_Model) getColumusKeyMulti(tableName, col string) (isMulti bool, isFind bool, notes string) {
|
||||
var haveGomod bool
|
||||
for _, v := range m.info.TabList {
|
||||
if strings.EqualFold(v.Name, tableName) {
|
||||
for _, v1 := range v.Em {
|
||||
if strings.EqualFold(v1.Name, col) {
|
||||
for _, v2 := range v1.Index {
|
||||
switch v2.Key {
|
||||
case ColumusKeyPrimary, ColumusKeyUnique, ColumusKeyUniqueIndex: // primary key unique key . 主键,唯一索引
|
||||
{
|
||||
return false, true, v.Notes
|
||||
}
|
||||
// case ColumusKeyIndex: // index key. 复合索引
|
||||
// {
|
||||
// isMulti = true
|
||||
// }
|
||||
}
|
||||
}
|
||||
return true, true, v.Notes
|
||||
} else if strings.EqualFold(v1.Type, "gorm.Model") {
|
||||
haveGomod = true
|
||||
notes = v.Notes
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// default gorm.Model
|
||||
if haveGomod {
|
||||
if strings.EqualFold(col, "id") {
|
||||
return false, true, notes
|
||||
}
|
||||
|
||||
if strings.EqualFold(col, "created_at") ||
|
||||
strings.EqualFold(col, "updated_at") ||
|
||||
strings.EqualFold(col, "deleted_at") {
|
||||
return true, true, notes
|
||||
}
|
||||
}
|
||||
|
||||
return false, false, ""
|
||||
// -----------------end
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user