【问题标题】:How to get the sum of related model results using Lucid Query builder如何使用 Lucid Query builder 获取相关模型结果的总和
【发布时间】:2019-08-13 10:07:33
【问题描述】:

我正在使用 AdonisJs,我正在尝试获取所有项目及其任务估计时间的总和。

我的代码是这样的

const entities = await Project.query()
  .with('task', (builder) => {
    builder.select('project_id')
    builder.sum('estimate as estimateTime')
    builder.groupBy('project_id')
  })
  .where({ account_id: accountId })
  .fetch()

我希望查询看起来像这样: SELECT "project_id", SUM("estimate") AS "estimateTime" FROM "project_tasks" WHERE "project_id" IN (5,6,1,2) GROUP BY "project_id"

但实际的查询是: SELECT "project_id", SUM("estimate") AS "estimateTime" FROM "project_tasks" WHERE "project_id" = 5 AND "project_id" IN (5,6,1,2) GROUP BY "project_id"

当我将 builder.sum('estimate as estimateTime') 添加到查询中时,它似乎添加了这个附加子句 "project_id" = 5。

我知道我可以自己构建此查询,但我想利用项目模型的其他关系。

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: node.js sum relationship adonis.js lucid


    【解决方案1】:

    为了获得相关的总和,您将需要数据库助手。所以你的查询应该是这样的:

    const entities = await Project.query()
      .with('task', (builder) => {
        builder.select(Database.raw('sum(estimate) as estimate'))
        .select('project_id')
        .groupBy('project_id')
      })
      .where({ account_id: accountId })
      .fetch()
    

    【讨论】:

    • 正是我想要的!谢谢!
    猜你喜欢
    • 2016-12-13
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多