获取GORM中的递归字段值



我有一个类别表,其中有一个名为children的递归字段。一个父节点可能有一个/多个子节点

type Category struct {
ID uint
Name string
ParentID *uint `gorm:"index" json:"parent_id"`
Children []Category `gorm:"foreignkey:ParentID"`
}

当我使用DB.Preload("Children").Find(&Category)时,我只得到第一个孩子字段,但孩子也有更多的孩子。我怎么能得到所有的领域,直到孩子没有更多的孩子?

如果你为我做一个查询,这将有助于我更好地理解。

Thanks in advance

您正在进行的查询类型是:

SELECT * FROM Category;
SELECT * FROM Children WHERE id IN (<your categories>);

这似乎都很好,除了你没有一个实体的孩子,它是一个字段在同一个类别表,如果你只是

var categories []Category;
DB.Find(&categories);

你应该从你的表中得到所有的类别,从那里你可以用Where()等过滤东西。

因为你想要一个类别的所有子元素,你可以用:

查询
var categories []Category;
parentCategoryID := 1;
DB.Where("parentID = ?", parentCategoryID).Find(&categories);

这将产生所有属于单个父类的子类。

你可以遍历这些子节点,并重复调用以找到它们的所有子节点,然后你可以将它们添加到切片中以平铺数据。

// continuing from previous code snippet
var flatCategories []Category;
for _, category := range categories {
var tempCategories []Category;
DB.Where("parentID = ?", category.ID).Find(&tempCategories);
flatCategories = append(flatCategories, tempCategories...);
}

参考查询与gorm

如何使用gorm预加载

DB.Preload("Category.Category.Category").Find(&Category)

这对我有用。似乎需要将depth值传递给Preload函数。

相关内容

  • 没有找到相关文章

最新更新