如何使用Ecto构建WHERE IN数组子句?

时间:2016-04-23 17:43:37

标签: elixir phoenix-framework ecto

如何在给定的ID列表中查找帖子?

这不起作用:

Post.where({ id: [1, 2]})
# SELECT * FROM posts WHERE id IN (1, 2)

Rails中的示例:

{{1}}

3 个答案:

答案 0 :(得分:42)

以下内容应该有效:

posts = Post |> where([p], p.id in [1, 2]) |> Repo.all

答案 1 :(得分:21)

接受的答案给了我undefined function p/0,所以我来到了这个:

from(p in Post, where: p.id in [1, 2]) |> Repo.all

答案 2 :(得分:8)

其他海报同时给出了"关键字"和"表达式"需要的模式,但我想评论并指出,如果要插入列表中的值,则需要在变量之前使用^运算符。在尝试其中任何一个之前,您还需要导入包含宏的模块(特殊因为宏具有不同的编译需求)。这都是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)