Как создать предложение WHERE IN array с помощью Ecto?
Как найти сообщения в данном списке идентификаторов?
Это не работает:
posts = Post |> where(id: [1, 2]) |> Repo.all
Пример в Rails:
Post.where({ id: [1, 2]})
# SELECT * FROM posts WHERE id IN (1, 2)
Ответ 1
Следующее должно работать:
posts = Post |> where([p], p.id in [1, 2]) |> Repo.all
Ответ 2
Принятый ответ дает мне undefined function p/0, поэтому я пришел к следующему:
from(p in Post, where: p.id in [1, 2]) |> Repo.all
Ответ 3
Другие плакаты дали как шаблоны "ключевые слова", так и "выражения", но я хотел прокомментировать и указать, что если вы интерполируете значения из списка, вам нужен оператор ^ перед переменной. Вам также необходимо импортировать модуль, который содержит макросы (специальные, потому что макросы имеют разные требования к компиляции), прежде чем пытаться выполнить одно из этих действий. Это все с ecto 2.1.4, кстати. Итак:
import Ecto.Query
...
id_list = [1,2,4,5,6]
# "expressions"
Post
|> where([p], p.id in ^id_list)
# "keywords"
from(p in Post, where: p.id in ^id_list)