package category import ( "github.com/towgo/towgo/dao/basedboperat" ) func (Category) TableName() string { return "category" } type Category struct { Id int64 `json:"id"` Image string `json:"image"` Description string `json:"description"` Name string `json:"name"` Type string `json:"type"` Pid int64 `json:"pid"` Weigh int64 `json:"weigh"` Children []Category `json:"children" xorm:"-"` } func (c *Category) AfterQuery(session basedboperat.DbTransactionSession) { var cs []Category cs = append(cs, Category{ Id: c.Id, Image: c.Image, Description: c.Description, Name: c.Name, Type: c.Type, Pid: c.Pid, Weigh: c.Weigh, Children: c.Children, }) children := findChildren(cs, session) c.Id = children[0].Id c.Image = children[0].Image c.Description = children[0].Description c.Name = children[0].Name c.Type = children[0].Type c.Pid = children[0].Pid c.Weigh = children[0].Weigh c.Children = children[0].Children } // 递归查询子集方法 func findChildren(categories []Category, session basedboperat.DbTransactionSession) []Category { var result []Category for _, category := range categories { var children []Category var list basedboperat.List list.Limit = -1 list.Where = append(list.Where, basedboperat.Condition{ Field: "pid", Operator: "=", Value: category.Id, }) session.ListScan(&list, &category, &children) // 传递切片的指针 category.Children = findChildren(children, session) result = append(result, category) } return result }