Elixir中的Eval-in参数(带Ecto)

问题描述 投票:2回答:2

看看下面的select()线:

def query_group(user, group_by, filters \\[]) do
    from(Click)
    |> select([c], {c.^group_by, count(c)})
    |> where([c], c.link_user_id == ^user.id)
    |> where([c], ^filters)
    |> group_by([c], ^group_by)
    |> Repo.all
    |> Enum.map(&(Tuple.to_list &1))
  end

group_by是一个原子。例如,如果group_by = :platform,然后在select领域,我需要得到select([c], {c.platform, count(c)})

接近这个的最佳方法是什么?

elixir ecto
2个回答
1
投票

您也可以使用field/2,如select([c], {field(c, ^group_by), count(1)})(不确定group_by需要固定在这里,但我想是这样)


0
投票

您可以使用fragments,将选择位更改为

...
|> select(fragment("count(*), ?", ^group_by))

这样您就可以轻松使用该功能的输入。

© www.soinside.com 2019 - 2024. All rights reserved.