代码之家  ›  专栏  ›  技术社区  ›  Bitwise

使用EXTO计算关联的模型行

  •  3
  • Bitwise  · 技术社区  · 7 年前

    我试图找出有多少项目属于某个特定用户。

    我知道您可以这样做来获得模型的计数:

    count = User |> Repo.aggregate(:count, :id)
    

    但是我如何才能找到属于该用户的项目数呢?

    2 回复  |  直到 7 年前
        1
  •  10
  •   Dogbert    7 年前

    这里有一种方法:获取用户,使用 assoc/2 要为其关联创建一个查询,然后以与现在相同的方式进行计数,请执行以下操作:

    User |> Repo.get(123) |> assoc(:projects) |> Repo.aggregate(:count, :id)
    
        2
  •  1
  •   Kevin Johnson    7 年前

    Projects 表属于 users 表,所以它有外键,所以您可以在项目模型上进行聚合计数,其中 project.user_id == ^user_id

    import Ecto.Query
    
    def count(user_id: user_id) do
       query = from project in Project,
          where: project.user_id == ^user_id
    
       Repo.aggregate(query, :sum, :amount)
    end