Подтвердить что ты не робот

Как создать предложение 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)
4b9b3361

Ответ 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)