golang gorm 递归查询单表
时间: 2023-12-07 07:04:56 浏览: 186
以下是golang gorm递归查询单表的示例代码:
```go
type AuthMenu struct {
MenuId uint `json:"menu_id" gorm:"column:menu_id;primaryKey;autoIncrement"`
ParentMenuId uint `json:"parent_menu_id" gorm:"column:parent_menu_id"`
Name string `json:"name" gorm:"column:name"`
Url string `json:"url" gorm:"column:url"`
Icon string `json:"icon" gorm:"column:icon"`
Cell string `json:"cell" gorm:"column:cell"`
DisplayOrder uint `json:"display_order" gorm:"column:display_order"`
}
func (AuthMenu) TableName() string {
return "auth_menu"
}
func (menu *AuthMenu) GetChildren(db *gorm.DB) (children []*AuthMenu) {
db.Where("parent_menu_id = ?", menu.MenuId).Find(&children)
for _, child := range children {
grandchildren := child.GetChildren(db)
children = append(children, grandchildren...)
}
return
}
```
在上面的代码中,我们定义了一个名为AuthMenu的结构体,它对应了数据库中的auth_menu表。我们还定义了一个GetChildren方法,该方法接收一个gorm.DB类型的参数db,并返回一个指向AuthMenu结构体的切片。该方法使用db.Where查询所有父菜单ID等于当前菜单ID的子菜单,并将它们存储在一个名为children的切片中。然后,该方法遍历children切片中的每个子菜单,并递归调用GetChildren方法,以获取每个子菜单的子菜单。最后,该方法将所有子菜单和孙子菜单存储在children切片中,并返回该切片。
阅读全文