web-dev-qa-db-ja.com

EctoでWHERE IN配列句を構築する方法は?

特定のIDリストで投稿を見つける方法は?

これは機能していません:

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

Railsの例:

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

以下が動作するはずです:

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

受け入れられた回答はundefined function p/0私に、だから私はこれに来ました:

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

他のポスターは、必要な「キーワード」と「式」の両方のパターンを与えましたが、リストから値を補間する場合、^演算子は変数の前にあります。また、これらのいずれかを試す前に、マクロを含むモジュールをインポートする必要があります(マクロには異なるコンパイルのニーズがあるため特別です)。これは、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)
11
jnmandal