Elixir 来自ltree的外胚层关联
我有一个主题模型,它形成了一个Elixir 来自ltree的外胚层关联,elixir,ecto,Elixir,Ecto,我有一个主题模型,它形成了一个层次结构,带有一个父id键。我希望能够在不进行递归选择的情况下快速访问路径,因此有一个额外的层次结构字段使用Postgres ltrees ltree部分工作正常,在数据库中看起来像这样:1.2.5,其中每个数字都是祖先主题的id 问题是如何加载一个主题,并预加载其祖先主题? 一条有希望的路线似乎是,但我无法让它发挥作用。在控制器中,我有: query = from t in App.Topic, where: fragment("hierarchy @>
层次结构
,带有一个父id
键。我希望能够在不进行递归选择的情况下快速访问路径,因此有一个额外的层次结构字段使用Postgres ltrees
ltree部分工作正常,在数据库中看起来像这样:1.2.5
,其中每个数字都是祖先主题的id
问题是如何加载一个主题,并预加载其祖先主题?
一条有希望的路线似乎是,但我无法让它发挥作用。在控制器中,我有:
query = from t in App.Topic,
where: fragment("hierarchy @> (SELECT hierarchy FROM topics WHERE id = ?)", ^id)
topic = Repo.get!(Topic, id)
|> Repo.preload([ancestors: ^query])
我添加了has_many:祖先,App.Topic,foreign_key::parent_id
,以避免异位对外键的抱怨,但这可能是不正确的
query = from t in App.Topic,
where: fragment("hierarchy @> (SELECT hierarchy FROM topics WHERE id = ?)", ^id)
topic = Repo.get!(Topic, id)
|> Repo.preload([ancestors: ^query])