无法在Ecto / Elixir中正确连接

时间:2017-01-31 05:51:24

标签: elixir phoenix-framework ecto

我有一个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

1 个答案:

答案 0 :(得分:0)

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

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