複数のorderBy()列を実行することは可能ですか?
knex
.select()
.table('products')
.orderBy('id', 'asc')
チェーン可能なorderBy()は単一の列キーとソート値のみを受け取りますが、どのようにして複数の列で順序付けできますか?
call .orderBy
複数回 複数の列で並べ替えるには:
knex
.select()
.table('products')
.orderBy('name', 'desc')
.orderBy('id', 'asc')
元の答えは技術的に正しく、有用ですが、私の意図は、プログラムで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()
を複数回呼び出します。
次の解決策を使用して問題を解決できます。
const builder = knex.table('products');
sortArray.forEach(
({ field, direction }) => builder.orderBy(field, direction)
);