How to build WHERE IN array clause with Ecto?

前端 未结 3 1963
借酒劲吻你
借酒劲吻你 2021-02-01 02:41

How to find posts in given List of ids?

This isn\'t working:

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

Example in Rails:

相关标签:
3条回答
  • 2021-02-01 03:00

    Accepted answer gives undefined function p/0 to me, so I came to this:

    from(p in Post, where: p.id in [1, 2]) |> Repo.all
    
    0 讨论(0)
  • 2021-02-01 03:12

    The following should work:

    posts = Post |> where([p], p.id in [1, 2]) |> Repo.all
    
    0 讨论(0)
  • 2021-02-01 03:21

    Other posters gave both the "keywords" and "expressions" patterns needed but I wanted to comment and point out that if you are interpolating the values from a list, you need the ^ operator before the variable. You also need to be importing the module which contains the macros (special because macros have different compilation needs) before trying either of these. This is all with ecto 2.1.4, btw. So:

    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)
    
    0 讨论(0)
提交回复
热议问题