gpt4 book ai didi

elixir - 如何通过查询过滤预加载的记录

转载 作者:行者123 更新时间:2023-12-03 09:03:10 24 4
gpt4 key购买 nike

我列出了记录列表(包)。

这些包通过多对多关系链接到项目:

  • 打包有_许多包元素
  • 商品有_许多包商品
  • item has_many :packs,通过:[:packitems, :pack]
  • 打包 has_many :items,通过:[:packitems, :item]

当我列出包时,我想预加载它们的事件项目

def list_packs(params) do
packs = Pack
|> preload_active_items()
|> Repo.all()
|> Repo.preload([:classroom, [packlanguages: :language]])
end

defp preload_active_items(query) do
query
|> join(:left, [pack], _ in assoc(pack, :packitems))
|> join(:left, [_, pi], _ in assoc(pi, :item))
|> where([..., i], i.active == true)
|> preload([_, pi, i], [packitems: {pi, item: i}])
# |> preload([_, pi, i], [packitems: {pi, item: ^from(i, where: i.active == true)}])
end

一切正常(我检索了包及其预加载的项目),但我在那些具有事件项目的包上过滤了包。

我尝试用虚线替换 where 子句,但语法不正确。

有什么想法吗?

最佳答案

我终于找到了路:

def list_packs(params) do
pi_query = from pi in PackItem,
join: i in assoc(pi, :item),
where: i.active == true
packs = Pack
|> Repo.all()
|> Repo.preload([:classroom, [packlanguages: :language, packitems: pi_query]])
end

关于elixir - 如何通过查询过滤预加载的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48878327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com