Knex.js多个orderBy()列

Ian*_*nes 13 node.js knex.js

是否可以执行多个orderBy()列?

knex
  .select()
  .table('products')
  .orderBy('id', 'asc')
Run Code Online (Sandbox Code Playgroud)

orderBy()可链接只需要一个列键和一个排序值,但我如何按多列排序?

Kev*_*vin 27

您可以多次调用.orderBy多个列进行排序:

knex
  .select()
  .table('products')
  .orderBy('name', 'desc')
  .orderBy('id', 'asc')
Run Code Online (Sandbox Code Playgroud)

  • 只需迭代列列表并为每个列调用`orderBy`.我会把基本的JS保存为练习:) (3认同)

Ian*_*nes 16

原始答案在技术上是正确的,也是有用的,但我的目的是找到一种以编程方式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);
    });
  })
Run Code Online (Sandbox Code Playgroud)

Knex提供了一个修改功能,允许queryBuilder直接操作.然后,数组迭代器会orderBy()多次调用.


Raf*_*ffa 6

Knex orderBy 函数还接收一个数组:

knex('users').orderBy(['email', 'age', 'name'])
Run Code Online (Sandbox Code Playgroud)

或者

knex('users').orderBy(['email', { column: 'age', order: 'desc' }])
Run Code Online (Sandbox Code Playgroud)

或者

knex('users').orderBy([{ column: 'email' }, { column: 'age', order: 'desc' }])
Run Code Online (Sandbox Code Playgroud)