我正在开发一个看起来像拍卖的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*/
}
答案 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