2014-02-27 3 views
10

개인 프로젝트에서 Node.js + express + Bookshelf.js를 배우고 있습니다. 어디에서 쿼리를 작성합니까? 특히 다음 코드에서 'ORDER BY'또는 'WHERE'를 설정하는 방법은 무엇입니까?Bookshelf.js 결과를 .orderBy()로 정렬하십시오.

var Accounts = require('../collections/accounts').collection; 

new Accounts().fetch({ 
    withRelated: ['folders'] 
}).then(function(collection) { 
    // process results 
}); 

나는 내가 같은 다형성 관계와 하위 표현으로 Laravel의 Elequent (PHP)로 사용하고있는 기능을 제공하는 것 때문에 Bookshelf.js을 배우고 싶습니다. 그러나 설명서가 매우 심층적이지 않으며 예제를 찾으려고 노력하는 것이 거의 불가능하다는 것을 알고 있습니다.

미리 도움을 청하십시오.

로빈

+0

SQL 코드를 작성하려면 왜 ORM을 사용합니까? [node-mysql] (https://github.com/felixge/node-mysql)과 비슷한 라이브러리가 더 잘 맞을 것입니다. – alex

+0

의견 및 제안에 감사드립니다. 원시 MySQL 코드를 작성하는 방법을 배우고 싶습니다. 그 도서관을 조사 할게. – user1094128

답변

12

아 그냥 내 질문에 대한 답을 발견했다.

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 
}); 

을 ... 잘 작동한다!

10

또한 단순히 쿼리 빌더를받지 않고

var Accounts = require('../collections/accounts').collection; 

new Accounts().query('orderBy', 'columnname', 'asc').fetch({ 
    withRelated: ['folders'] 
}).then(function(collection) { 
    // process results 
}); 

을 할 수 있습니다.

10

나는 이것이 오래 된 게시물이라는 것을 알고 있지만 여기에 그것이있다. BookshelfJS는 훌륭하지만 간단한 기능이 부족합니다. 그래서 저는 Closet이라는 자체 기본 모델을 만들었습니다. 내 다른 모델이 Closet 대신 Bookshelf.Model을 소비

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); 
     }); 
    } 
}); 

:

orderBy 들어,이 같은 Closet 보이는 것입니다. 그런 다음 직접 orderBy을 사용할 수 있습니다.

new Accounts() 
    .orderBy('name', 'DESC') 
    .fetch() 
    .then(function(collection){ 
     // process results 
    }); 
+0

orderBy 필드가 API에 따라 고정되어 있지 않은 경우 여러 orderBy에 대해이 작업을 수행 할 수 있습니까? – atjoshi