[英]Elixir Ecto : multiple joins and reusable/composable queries
在Ecto中,您可以像這樣制作可重用/可組合的查詢:
defmodule AModel
#...
def anonymous(q), do: q |> where([am], is_null(am.user_id))
end
請參閱此博客文章中的更多示例。
但是,我遇到使用多個連接的問題。
假設我們有一個如下所示的模式:
本文中提出的解決方案並不適用於深連接:
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
查詢函數將綁定表作為第一個(連接的第二個)參數。 它包含以前的連接,並且很難加入訂單。
在我們的例子中, anonymous
函數以起始表為目標。 但是在查詢示例中,AModel是第4個綁定...
任何想法或技術擺脫這種順序依賴?
編輯:
我從博客作者那里得到了答案。 他告訴我,沒有本地的其他方式來處理綁定而不是表中的位置。 他還在這篇文章中強調了這一事實。
但是為了上帝的緣故,如果順序只是重要的,為什么我不能在它上面創建一個將名稱與綁定索引相關聯的命名映射?
這問題太多了:p?
Ecto 3.0為此用例添加了命名綁定 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.