elixir - docs - ecto repo
¿Cómo construir WHERE IN array con la cláusula Ecto? (3)
La respuesta aceptada me da una undefined function p/0
, así que llegué a esto:
from(p in Post, where: p.id in [1, 2]) |> Repo.all
¿Cómo encontrar publicaciones en la lista de identificadores dados?
Esto no está funcionando:
posts = Post |> where(id: [1, 2]) |> Repo.all
Ejemplo en rieles:
Post.where({ id: [1, 2]})
# SELECT * FROM posts WHERE id IN (1, 2)
Lo siguiente debería funcionar:
posts = Post |> where([p], p.id in [1, 2]) |> Repo.all
Otros carteles dieron los patrones de "palabras clave" y "expresiones" necesarios, pero quería comentar y señalar que si está interpolando los valores de una lista, necesita el operador ^
antes de la variable. También debe importar el módulo que contiene las macros (especial porque las macros tienen diferentes necesidades de compilación) antes de probar cualquiera de estas. Esto es todo con ecto 2.1.4, por cierto. Asi que:
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)