Knex.js multiple orderBy() columns

后端 未结 4 1151
天命终不由人
天命终不由人 2021-02-18 18:27

Is it possible to do multiple orderBy() columns?

knex
  .select()
  .table(\'products\')
  .orderBy(\'id\', \'asc\')

The orderBy() chainable on

相关标签:
4条回答
  • 2021-02-18 19:14

    You can use the following solution to solve your problem:

    const builder = knex.table('products');
    
    sortArray.forEach(
      ({ field, direction }) => builder.orderBy(field, direction)
    );
    
    0 讨论(0)
  • 2021-02-18 19:20

    The original answer is technically correct, and useful, but my intention was to find a way to programatically apply the orderBy() function multiple times, here is the actual solution I went with for reference:

    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 offers a modify function which allows the queryBuilder to be operated on directly. An array iterator then calls orderBy() multiple times.

    0 讨论(0)
  • 2021-02-18 19:23

    The Knex orderBy function also receives an array:

    knex('users').orderBy(['email', 'age', 'name'])
    

    or

    knex('users').orderBy(['email', { column: 'age', order: 'desc' }])
    

    or

    knex('users').orderBy([{ column: 'email' }, { column: 'age', order: 'desc' }])
    
    0 讨论(0)
  • 2021-02-18 19:30

    You can call .orderBy multiple times to order by multiple columns:

    knex
      .select()
      .table('products')
      .orderBy('name', 'desc')
      .orderBy('id', 'asc')
    
    0 讨论(0)
提交回复
热议问题