Как получить сумму результатов связанной модели с помощью Lucid Query Builder

Я использую 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 ("оценка") AS "EstimationTime" FROM "project_tasks" WHERE "project_id" IN (5,6,1,2) GROUP BY "project_id"

но фактический запрос: ВЫБЕРИТЕ "идентификатор_проекта", СУММ ("оценка") КАК "оценка_времени" ОТ "задачи_проекта" ГДЕ "идентификатор_проекта" = 5 И "идентификатор_проекта" IN (5,6,1,2) ГРУППА ПО "идентификатору проекта"

Кажется, что он добавляет это дополнительное предложение "project_id" = 5, когда я добавляю builder.sum ('оценка как оценка времени') к запросу.

Я знаю, что могу составить этот запрос сам, но я хочу воспользоваться преимуществами других взаимосвязей модели проекта.

Есть идеи, как я могу это обойти?


person Mike Athi    schedule 13.08.2019    source источник


Ответы (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()
person Rossi K    schedule 13.08.2019
comment
Именно то, что я искал! Спасибо! - person Mike Athi; 13.08.2019