使用 ecto 计算关联的模型行

Counting associated model rows with ecto

我正在尝试查找属于特定用户的项目数量。

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

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

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

Projects table 属于 users table,因此它具有外键,因此您可以对 project.user_id == ^user_id[ 所在的项目模型进行聚合计数=14=]

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

这是一种方法:获取用户,使用 assoc/2 为其关联创建查询,然后按照与现在相同的方式对其进行计数:

User |> Repo.get(123) |> assoc(:projects) |> Repo.aggregate(:count, :id)