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