Comment trouver des messages dans une liste d'ID donnée?
Cela ne fonctionne pas:
posts = Post |> where(id: [1, 2]) |> Repo.all
Exemple dans Rails:
Post.where({ id: [1, 2]})
# SELECT * FROM posts WHERE id IN (1, 2)
Les éléments suivants devraient fonctionner:
posts = Post |> where([p], p.id in [1, 2]) |> Repo.all
La réponse acceptée donne undefined function p/0
pour moi, alors je suis venu à ceci:
from(p in Post, where: p.id in [1, 2]) |> Repo.all
D'autres affiches ont donné les modèles "mots clés" et "expressions" nécessaires, mais je voulais commenter et souligner que si vous interpolez les valeurs d'une liste, vous avez besoin du ^
opérateur avant la variable. Vous devez également importer le module qui contient les macros (spécial car les macros ont des besoins de compilation différents) avant d'essayer l'un ou l'autre. Tout cela avec ecto 2.1.4, btw. Donc:
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)