gpt4 book ai didi

join - Elixir : multiple joins and reusable/composable queries

转载 作者:行者123 更新时间:2023-12-04 15:56:01 25 4
gpt4 key购买 nike

在 Ecto 中,您可以像这样进行可重用/可组合的查询:

defmodule AModel
#...

def anonymous(q), do: q |> where([am], is_null(am.user_id))
end
end
查看更多示例 on this blog post .
但是,我在使用多个连接时遇到了问题。
假设我们有一个看起来像这样的模式:
  • AModel 属于 BModel
  • BModel 属于 CModel
  • CModel 属于 DModel

  • 本文中提出的解决方案不适用于深度连接:
    q = DModel
    |> join(:inner, [dm], cm in assoc(dm, :c_models))
    |> join(:inner, [_, cm], bm in assoc(cm, :b_models))
    |> join(:inner, [_, _, bm], am in assoc(bm, :a_models))
    |> AModel.anonymous
    查询函数将绑定(bind)表作为第一个(第二个用于连接)参数。
    它包含以前的连接,但遗憾的是连接顺序很紧。
    在我们的例子中, anonymous函数以起始表为目标。
    但是在查询示例中,AModel 是第 4 个绑定(bind)...
    摆脱这种订单依赖的任何想法或技术?
    编辑:
    我从博客作者那里得到了答案。
    他告诉我,除了在表格中的位置之外,没有其他本地方式来处理绑定(bind)。
    他还给了 this article突出这一事实。
    但是看在上帝的份上,如果顺序很重要,为什么我不能在它上面创建一个将 name 与绑定(bind)索引相关联的命名映射?
    这要求太多了吗:p?

    最佳答案

    使用命名绑定(bind)

    添加了 Ecto 3.0 named bindings对于这个用例。

    关于join - Elixir : multiple joins and reusable/composable queries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33170199/

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