I am working on a personal project to learn Node.js + express + Bookshelf.js. Where do I build queries? In particular, how do I simply set an 'ORDER BY' or 'WHERE' in the following code?
var Accounts = require('../collections/accounts').collection;
new Accounts().fetch({
withRelated: ['folders']
}).then(function(collection) {
// process results
});
I would like to learn Bookshelf.js because it seems to offer the features I am used to with Laravel's Elequent (PHP), such as polymorphic relationships and sub expressions. However, I'm finding that the documentation is not very in-depth and trying to find examples is near impossible.
Thanks in advance for any help.
Robin
Ah just found the answer to my question.
As the bookshelf.js website says, it uses knex.js query builder. So to sort my collection this is what I have done:
var Accounts = require('../collections/accounts').collection
new Accounts().query(function(qb){
qb.orderBy('name','DESC');
}).fetch({
}).then(function(collection){
// process results
});
... which works great!
I know this is an old post, but here is my take on it. BookshelfJS is amazing, but it lacks some simple features. So I have created my own base model, called Closet
.
For orderBy
, this is what Closet
looks like:
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);
});
}
});
My other models expend Closet
instead of Bookshelf.Model
. Then you can directly use orderBy
:
new Accounts()
.orderBy('name', 'DESC')
.fetch()
.then(function(collection){
// process results
});
You can also simply do
var Accounts = require('../collections/accounts').collection;
new Accounts().query('orderBy', 'columnname', 'asc').fetch({
withRelated: ['folders']
}).then(function(collection) {
// process results
});
without getting to the query builder.
来源:https://stackoverflow.com/questions/22068144/sort-bookshelf-js-results-with-orderby