请教!GORM是否支持数据库递归查询?

river1987 · 2022-06-07 14:46:38 · 2327 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-06-07 14:46:38 的主题,其中的信息可能已经有所发展或是发生改变。

在GORM的官方文档中未看到递归查询语句的写法,请问各位gopher,是否知道如何写一个语句支持递归查询?

如:在一个数据表中id 和pid,父对象的id为子对象的pid,如何通过一次查询查询出所有id=xx的子对象及孙对象一直到对后的叶节点?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2327 次点击  
加入收藏 微博
7 回复  |  直到 2022-06-10 15:57:54
xiangbei
xiangbei · #1 · 3年之前

用GO来处理: var menu []ArticleNode = db.Where("pid=? and ischeck=?", pid, 1).Order("sort DESC").Find(&menu).Error treeList := []*TreeList{} for , v := range menu { child := v.GetAllNodeNoCache(v.Id) node := &TreeList{ Id: v.Id, Title: v.Title,
Slug: v.Slug, Pid: v.Pid,
Ischeck: v.Ischeck, } node.Children = child treeList = append(treeList, node) } return treeList

xwszt
xwszt · #2 · 3年之前

看官方文档【预加载】相关内容

zxnhl702
zxnhl702 · #3 · 3年之前

百度下with recursive,虽然可能不是用gorm的方式

river1987
river1987 · #4 · 3年之前
xiangbeixiangbei #1 回复

用GO来处理: var menu []ArticleNode _ = db.Where("pid=? and ischeck=?", pid, 1).Order("sort DESC").Find(&menu).Error treeList := []*TreeList{} for _, v := range menu { child := v.GetAllNodeNoCache(v.Id) node := &TreeList{ Id: v.Id, Title: v.Title, Slug: v.Slug, Pid: v.Pid, Ischeck: v.Ischeck, } node.Children = child treeList = append(treeList, node) } return treeList

感谢,现在就是用的go程序来实现迭代,没有发现gorm能支撑with recursive的语法。

river1987
river1987 · #5 · 3年之前
xwsztxwszt #2 回复

看官方文档【预加载】相关内容

预加载看过了,只能加载下一层子对象,没有递归到最底层

river1987
river1987 · #6 · 3年之前
zxnhl702zxnhl702 #3 回复

百度下with recursive,虽然可能不是用gorm的方式

查到了一个git 上有讨论,不过好像没有合并到代码里,至少从文档里没看到with recursive的方法

xwszt
xwszt · #7 · 3年之前

@river1987 那你就自定义预加载,工具没提供就自己写呗

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传