是否可以执行多个orderBy()列?
knex
.select()
.table('products')
.orderBy('id', 'asc')
orderBy()chainable只需要一个列键和一个排序值,但我如何按多列排序?
答案 0 :(得分:24)
您可以call .orderBy
multiple times按多列排序:
knex
.select()
.table('products')
.orderBy('name', 'desc')
.orderBy('id', 'asc')
答案 1 :(得分:14)
原始答案在技术上是正确的,也很有用,但我的目的是找到一种以编程方式多次应用orderBy()
函数的方法,这是我参考的实际解决方案:
var sortArray = [
{'field': 'title', 'direction': 'asc'},
{'field': 'id', 'direction': 'desc'}
];
knex
.select()
.table('products')
.modify(function(queryBuilder) {
_.each(sortArray, function(sort) {
queryBuilder.orderBy(sort.field, sort.direction);
});
})
Knex提供了一个修改功能,允许直接操作queryBuilder。然后,数组迭代器会多次调用orderBy()
。
答案 2 :(得分:3)
Knex orderBy函数还接收一个数组:
knex('users').orderBy(['email', 'age', 'name'])
或
knex('users').orderBy(['email', { column: 'age', order: 'desc' }])
或
knex('users').orderBy([{ column: 'email' }, { column: 'age', order: 'desc' }])
答案 3 :(得分:2)
您可以使用以下解决方案来解决您的问题:
const builder = knex.table('products');
sortArray.forEach(
({ field, direction }) => builder.orderBy(field, direction)
);