Elixir Ecto: 使用Arbor在Postgresql中实现邻接列表与树的遍历

Elixir Ecto: 使用Arbor在Postgresql中实现邻接列表与树的遍历,第1张

概述Arbor 项目地址 什么是CTEs? 使用CTEs实现Ecto的邻接列表与树的遍历. Arbor 使用 parent_id 和 CTEs创建简单的树状结构. 使用 defmodule Comment do use Ecto.Schema # See config options below use Arbor.Tree, foreign_key_type: :binary_id

Arbor 项目地址

什么是CTEs?

使用CTEs实现Ecto的邻接列表与树的遍历. Arbor 使用 parent_IDCTEs创建简单的树状结构.

使用
defmodule Comment do  use Ecto.Schema  # See config options below  use Arbor.Tree,foreign_key_type: :binary_ID  schema "comments" do    fIEld :body,:string    belongs_to :parent,Arbor.Comment    timestamps  end  end
获取根级节点
roots = Comment.roots         |> Repo.all
获取兄弟节点
siblings = my_comment        |> Comment.siblings        |> Comment.order_by_popularity        |> Repo.all
获取祖先节点

获取当前节点的先辈节点,从下网上返回所有父辈节点. 主要用于显示一个分类导航路径(类似网站的Breadcrumbs面包屑功能)

descendants = my_comment              |> Comment.ancestors              |> Comment.order_by_inserted_at              |> Repo.all
获取后代节点

获取当前节点的所有后代节点,返回后代节点列表

descendants = my_comment              |> Comment.descendants              |> Comment.order_by_inserted_at              |> Repo.all
获取子节点

获取当前节点的所有子节点

children = my_comment           |> Comment.children           |> Repo.all
获取父节点

获取当前节点的父节点

parent = my_comment         |> Comment.parent         |> Repo.first
选项

table_name 设置在CTEs中要使用的表名称

tree_name 设置CTE的名称

primary_key 默认来自于Ecto的@primary_key模块属性

primary_key_type 默认来自于Ecto的@primary_key模块属性

foreign_key 默认为parent_ID

foreign_key_type 默认来自于Ecto的@primary_key模块属性

orphan_strategy 默认为 :nothing,当前未实现

总结

以上是内存溢出为你收集整理的Elixir Ecto: 使用Arbor在Postgresql中实现邻接列表与树的遍历全部内容,希望文章能够帮你解决Elixir Ecto: 使用Arbor在Postgresql中实现邻接列表与树的遍历所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存