You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.2 KiB

package service
import (
"shop-api/global"
"shop-api/model"
)
func GetTbCategoryBreadcrumb(id uint) (error, []model.Breadcrumb) {
var (
category model.Breadcrumb
result = make([]model.Breadcrumb, 0)
)
err := global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", id).Find(&category).Error
if err != nil {
return err, nil
}
if category.Pid != 0 {
err = getTbCategoryParent(&category)
if err != nil {
return err, nil
}
}
transferBreadcrumbList(&category, &result)
return nil, result
}
func getTbCategoryParent(breadcrumb *model.Breadcrumb) (err error) {
var tmp model.Breadcrumb
err = global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", breadcrumb.Pid).Find(&tmp).Error
if err != nil {
return err
}
breadcrumb.Parent = &tmp
if breadcrumb.Parent.Pid != 0 {
err = getTbCategoryParent(breadcrumb.Parent)
return err
}
return nil
}
func transferBreadcrumbList(info *model.Breadcrumb, breadcrumbs *[]model.Breadcrumb) {
if info.ID != 0 {
*breadcrumbs = append(*breadcrumbs, *info)
if info.Parent != nil {
transferBreadcrumbList(info.Parent, breadcrumbs)
}
}
}