我有一个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
答案 0 :(得分:0)
您不应该在ChildItem2
中注入where
,因为它已作为join
的结果作为第一个参数传递。
问题是由^
(引脚操作符)引起的,当它附加到函数调用时它永远不会起作用 - 即使在case
或cond
中也是如此。尝试简单地将get_some_value()
的结果分配给变量。