Как получить сумму результатов связанных моделей, используя конструктор Lucid Query

Я использую 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 "оценка времени " FROM "project_tasks"ГДЕ" идентификатор_проекта " IN (5,6,1,2) GROUP BY "project_id"

но фактический запрос: SELECT "project_id", SUM("оценка") AS "оценка времени " FROM "project_tasks"ГДЕ"project_id" = 5 И"project_id" IN (5,6,1,2) GROUP BY "project_id"

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

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

Любые идеи, как я могу обойти это?

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()
Другие вопросы по тегам