golang--gorm无限级分类初始化

2022年6月22日 463点热度 0人点赞 0条评论
可以先参考之前关于Laravel的无限级分类实现。

Laravel无限级分类的一种实现

Laravel的orm功能可以说是非常强大,能够实现各种方便的操作,而go语言的gorm模型则没有那么复杂的功能,一些功能需要我们手动实现。
我们先定义好分类的结构体:
type Category struct {  BaseModel // 主键时间戳等  Name        string `gorm:"type:varchar(20);not null"`  IsDirectory bool   `gorm:"default:false" json:"is_directory" form:"is_directory"`  ParentID    int32  `json:"parent_id"`  Level       int32  `gorm:"type:int unsigned;not null;default:1"`  Path        string `gorm:"type:varchar(40);not null;default:'-'"`}

类似于Laravel的模型初始化函数,gorm也有自己的初始化函数,叫做钩子函数:

//BeforeCreate 钩子函数,用于创建分类之前初始化level和pathfunc (c *Category) BeforeCreate(tx *gorm.DB) (err error) {  if c.ParentID == 0 {    c.Level = 1    c.Path = "-"  } else {    c.Level = c.Parent().Level + 1    c.Path = c.Parent().Path + strconv.Itoa(int(c.ParentID)) + "-"  }  return}
其中parent函数为获取父类分类,小可目前未找到利用gorm关联来获取父类的方法,这里采用查询parent_id方式实现,有知道的请留言:
func (c *Category) Parent() *Category {  var category Category  global.MT_DB.Find(&category, c.ParentID)  return &category}
插入操作后会自动生成对应的level和path,当然还涉及到is_directory这个字段,我们使用钩子函数也能实现,这块等小可测试完了再给大家上代码。

13500golang--gorm无限级分类初始化

root

这个人很懒,什么都没留下

文章评论