Как получить сумму результатов связанных моделей, используя конструктор 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()