Сортировка результатов Bookshelf.js с .orderBy()
Я работаю над личным проектом, чтобы узнать Node.js + express + Bookshelf.js. Где я могу создавать запросы? В частности, как я могу просто установить "ORDER BY" или "WHERE" в следующем коде?
var Accounts = require('../collections/accounts').collection;
new Accounts().fetch({
withRelated: ['folders']
}).then(function(collection) {
// process results
});
Я хотел бы узнать Bookshelf.js, потому что он, кажется, предлагает функции, с которыми я привык с Laravel Elequent (PHP), такие как полиморфные отношения и подвыражения. Тем не менее, я обнаружил, что документация не очень глубока, и поиск примеров практически невозможен.
Заранее благодарим за помощь.
Робин
Ответы
Ответ 1
А просто нашел ответ на мой вопрос.
Как сообщает сайт bookshelf.js, он использует построитель запросов knex.js. Поэтому для сортировки моей коллекции это то, что я сделал:
var Accounts = require('../collections/accounts').collection
new Accounts().query(function(qb){
qb.orderBy('name','DESC');
}).fetch({
}).then(function(collection){
// process results
});
... который отлично работает!
Ответ 2
Вы также можете просто сделать
var Accounts = require('../collections/accounts').collection;
new Accounts().query('orderBy', 'columnname', 'asc').fetch({
withRelated: ['folders']
}).then(function(collection) {
// process results
});
не дойдя до конструктора запросов.
Ответ 3
Я знаю, что это старый пост, но вот мое занятие. Книжная полка удивительна, но ей не хватает некоторых простых функций. Поэтому я создал свою собственную базовую модель под названием Closet
.
Для orderBy
это выглядит как Closet
:
var Closet = DB.Model.extend({
/**
* Orders the query by column in order
* @param column
* @param order
*/
orderBy: function (column, order) {
return this.query(function (qb) {
qb.orderBy(column, order);
});
}
});
Мои другие модели расходуют Closet
вместо Bookshelf.Model
. Затем вы можете напрямую использовать orderBy
:
new Accounts()
.orderBy('name', 'DESC')
.fetch()
.then(function(collection){
// process results
});