我有以下代码
switch (aggregation) {
case "year":
select = { year: "%Y" };
break;
case "month":
select = { year: "%Y", month: "%m" };
break;
default: // day
select = { date_eng: "%Y-%m-%d", date_ger: "%d.%m.%Y" };
}
我想做这样的事情:
await knex.transaction(trx => {
return trx
.select([
for (let [key, value] of Object.entries(select)) {
knex.raw(`DATE_FORMAT(\`created_at\`, '${key}') AS ${value}`),
}
])
.count('id AS total')
.from(`tablename`)
.where(builder => {
builder.whereBetween('created_at', [datetime_start, datetime_end])
})
})
有人知道我该如何解决这个问题吗?
答案 0 :(得分:1)
你应该返回一个包含值的数组,
await knex.transaction((trx) => {
return trx
.select(
Object.entries(select).map(([key, value]) =>
knex.raw('DATE_FORMAT(??, '?') AS ??', ['created_at' ,value, key])
)
)
.count('id AS total')
.from(`tablename`)
.where((builder) => {
builder.whereBetween('created_at', [datetime_start, datetime_end]);
});
});