如何一次从多个表中获取书架模型

我正在开发一个看起来像一个拍卖的node.js web服务。 我使用bookshelf.js模型和MySQL作为数据库。 请考虑下面的db结构:

users: id | login | password | users_roles: id | user_id | role_id | roles: id | name | auctions: id | user_id | rating_id | rating: id | speed | quality | communication | 

目前我已经实现了用户模型如下:

  var Bookshelf = require('./bookshelf_model'), Role = require("./role"); var User = Bookshelf.Model.extend({ tableName: 'users', role: function () { return this.belongsToMany(Role, 'users_roles', 'user_id', 'role_id'); } }); module.exports = User; 

我可以通过获取用户详细信息

 User.forge({id: 1}).fetch().then( function(userDetails){ ....... } ); 

这将从用户表中返回用户的详细信息。 要获得用户angular色,我必须做另一个数据库调用,如:

 User.forge({id: 1}).role().fetch().then( function(userRoleDetails){ ..... } ); 

是否有任何方法来使用bookshelf.js(或通过使用anythig其他)一次获得所有的用户信息? 一次得到这样的东西真是太棒了:

 user={ id:..., login:..., password:..., role_id:...., rating:/*avg rating from all user's auctions*/ 

}

尝试这样的事情:

return User.forge( { id: 1 } ) .fetch( { require: true, //throws error if not found withRelated: [ 'role' ] } ) .then( function( userModel ) { return userModel.toJSON(); //don't need this step, depends what you want to do next } )

就是这样 这将使用role属性将user_roles对象加载到User中。 一些文档在这里