2016-04-01 2 views
7

複数のorderBy()カラムを使用することはできますか?Knex.js複数のorderBy()カラム

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

orderBy()連鎖可能なのは、単一の列キーとソート値だけですが、複数の列でどのように注文できますか?

+1

私はそこに特別な機能があるとは思っていませんが、あなたは 'orderByRaw'を実行して必要なものを書くことができます –

+0

@VsevolodGoloviznin私はそれをする必要はないと思っていました。 –

答えて

16

あなたはcall .orderBy multiple timesは、複数の列で注文することができます。

knex 
    .select() 
    .table('products') 
    .orderBy('name', 'desc') 
    .orderBy('id', 'asc') 
+1

ありがとうございますが、それをプログラム的に適用する方法はありますか? orderByフィールドの未知数については? –

+1

列のリストを繰り返し、それぞれに対して 'orderBy'を呼び出します。私はあなたのための練習として基本的なJSを保存します:) – Kevin

6

オリジナルの答えは技術的に正しい、と便利ですが、私の意図は、プログラムで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()を複数回呼び出します。

+0

私は元の答えがあなたも意図したように働いていたと思います。たとえば: let query = knex .select() .table( 'products'); _each(sortArray、function(sort){ query.orderBy(sort.field、sort.direction); }); – nembleton

関連する問題