Сортировка результатов Bookshelf.js с .orderBy() - программирование
Подтвердить что ты не робот

Сортировка результатов 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), такие как полиморфные отношения и подвыражения. Тем не менее, я обнаружил, что документация не очень глубока, и поиск примеров практически невозможен.

Заранее благодарим за помощь.

Робин

4b9b3361

Ответ 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
    });