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

时间:2015-07-13 20:57:24

标签: javascript mysql node.js bookshelf.js

我正在开发一个看起来像拍卖的node.js网络服务。我使用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     |

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

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

这将从users表返回用户的详细信息。要获得用户角色,我必须进行另一次数据库调用,例如:

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*/

}

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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

这样的事情。这会将user_roles对象加载到具有role属性的用户中。一些文档here