使用jinzhu的gorm根据父id查询出所有的子id
时间: 2024-03-19 21:45:18 浏览: 116
sql查询某个parentid下的所有childid
3星 · 编辑精心推荐
如果你使用的是 jinzhu 的 GORM v1,你可以使用 `Where` 方法和 `Find` 方法来查询所有的子元素。以下是示例代码:
```go
type Category struct {
ID uint
ParentID uint
}
func FindChildren(db *gorm.DB, parentID uint) ([]Category, error) {
var categories []Category
err := db.Where("parent_id = ?", parentID).Find(&categories).Error
if err != nil {
return nil, err
}
for i := range categories {
subCategories, err := FindChildren(db, categories[i].ID)
if err != nil {
return nil, err
}
categories = append(categories, subCategories...)
}
return categories, nil
}
```
该函数使用递归方式查询所有的子元素,并将它们添加到一个切片中。请注意,这种方法可能会导致性能问题,因为它需要多次查询数据库。如果你的数据集很大,你可能需要使用其他的查询方法来提高性能。
如果你使用的是 GORM v2,你可以使用 `Recursive` 方法来查询所有的子元素。以下是示例代码:
```go
type Category struct {
ID uint
ParentID uint
}
func FindChildren(db *gorm.DB, parentID uint) ([]Category, error) {
var categories []Category
err := db.Where("parent_id = ?", parentID).Preload("Children", func(db *gorm.DB) *gorm.DB {
return db.Recursive(10)
}).Find(&categories).Error
if err != nil {
return nil, err
}
return categories, nil
}
```
该函数使用 `Preload` 方法和 `Recursive` 方法来查询所有的子元素,并将它们预加载到 `Children` 字段中。请注意,`Recursive` 方法需要指定递归的深度,以避免无限递归。
阅读全文