无法在 Ecto/Elixir 中正确连接



我有一个ParentModel,ChildModel1和ChildModel2。ParentModel 有许多 ChildModel1,ChildModel1 有许多 ChildModel2。

  data = ChildModel2
         |> join(:left, [chmd2], chmd1 in assoc(chmd2, :child_model1))
         |> where(ChildItem2, [a], a.child_model1.parent_model_id == ^get_some_value()) # get_some_value() returns a number
         |> Repo.all()

下面是一个例外:

cannot use ^get_some_value() outside of match clauses

当我用文字替换它时,

    |> where(ChildItem2, [a], a.child_model1.parent_model_id == 123)  

我得到:

undefined function where/4

更新

错误仍然存在:

data = ChildModel2
         |> join(:left, [chmd2], chmd1 in assoc(chmd2, :child_model1))
         |> where([a], a.child_model1.parent_model_id == 123) # [a] is ChildModel2
         |> Repo.all()

错误:

a.child_model1().parent_model_id() is not a valid query expression

你不应该在where中注入ChildItem2,因为它已经作为join的结果作为第一个参数传递。

该问题是由^(引脚运算符)引起的,当它附加到函数调用时,它永远不会起作用 - 即使在casecond中也是如此。尝试简单地将get_some_value()的结果分配给变量。

最新更新