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.
49 lines
1.2 KiB
49 lines
1.2 KiB
6 months ago
|
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)
|
||
|
}
|
||
|
}
|
||
|
}
|