如何在bookshelfJs中实现多个orderBy
我可以向模型添加任意数量的 orderBy,但在 API 中可以有任何排序选项
例如 example.com/users?sort=-name,status
并且不需要硬编码。
下面的答案似乎符合要求
Knex.js multiple orderBy() columns
但是如何在Bookshelf中实现多个orderBy?
models/Users.js
var Bookshelf = require('../../dbConfig').bookshelf;
var User = Bookshelf.Model.extend({
tableName: 'user_table'
});
var Users = Bookshelf.Collection.extend({
model: User
});
module.exports = {
User: User,
Users: Users
};
services.js
var Model = require('./../models/Users');
var express = require('express');
var listAllContentProviders = function (query_params, callback) {
Model.Users
.forge()
.orderBy("name")
.orderBy("-status")
.fetch()
.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
};
最佳答案
从url
获取查询字符串
,
var queryData = url.parse(request.url, true).query;
var sortArray = [];
if (queryData.sort) {
sortArray.push({field: queryData.sort , 'direction': 'asc'};
}
现在 sortArray
拥有所有排序字段,
现在使用您在问题中添加的答案 ( Knex.js multiple orderBy() columns ) 来完成您的要求
knex
.select()
.table('products')
.modify(function(queryBuilder) {
_.each(sortArray, function(sort) {
queryBuilder.orderBy(sort.field, sort.direction);
});
})
未测试:
Model.Users
.forge()
.modify(function(queryBuilder) {
_.each(sortArray, function(sort) {
queryBuilder.orderBy(sort.field, sort.direction);
})
})
.fetch()
.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
New modified:
尝试这样的事情,
queryBuilder = Model.Users
.forge()
.fetch();
sortArray.forEach( function(sort) {
queryBuilder.orderBy(sort.field, sort.direction);
});
queryBuilder.then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
如果您在解决 promise 时遇到任何问题,请像这样修改它,
queryBuilder = Model.Users
.forge();
queryBuilder.then(function(){
sortArray.forEach( function(sort) {
queryBuilder.orderBy(sort.field, sort.direction);
})
}).fetch().then(function (collection) {
return callback(null, collection);
})
.catch(function (err) {
return callback(err, null);
});
关于javascript - bookshelf js 中的多个 order By() 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40587536/