У меня есть ParentModel, ChildModel1 и ChildModel2. В ParentModel есть много ChildModel1, а ChildModel1 имеет много ChildModel2.Невозможно выполнить соединение в Ecto/Elixir
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
У вас есть 'import Ecto.Query' в этом модуле? Вы получите ошибку «can not use^outside ...», если макрос не импортирован в этот модуль. – Dogbert
Для второй ошибки, я думаю, вы хотите '|> где ([chmd2, chmd1], chmd1.parent_model_id == 123)'. – Dogbert
@ Dogbert, используя оператор булавки, не будет работать с вызовом функции. – PatNowak