Javascript 如何一次从多个表中获取书架模型
我正在开发一个node.js web服务,它看起来像一个拍卖。我使用bookshelf.js作为模型,使用MySQL作为数据库。 请考虑以下dB结构:Javascript 如何一次从多个表中获取书架模型,javascript,mysql,node.js,bookshelf.js,Javascript,Mysql,Node.js,Bookshelf.js,我正在开发一个node.js web服务,它看起来像一个拍卖。我使用bookshelf.js作为模型,使用MySQL作为数据库。 请考虑以下dB结构: users: id | login | password | users_roles: id | user_id | role_id | roles: id | name | auctions: id | user
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){
.......
}
);
这将从users表返回用户的详细信息。要获得用户角色,我还必须执行另一个db调用,如:
User.forge({id: 1}).role().fetch().then(
function(userRoleDetails){
.....
}
);
是否有任何方法可以使用bookshelf.js(或使用任何其他方法)一次获取所有用户信息?如果能马上得到这样的东西那就太好了:
user={
id:...,
login:...,
password:...,
role_id:....,
rating:/*avg rating from all user's auctions*/
}试试这样的方法:
返回用户.forge({
身份证号码:1
} )
.fetch({
require:true,//如果找不到,则抛出错误
withRelated:['角色']
} )
.then(函数(用户模型){
return userModel.toJSON();//不需要此步骤,取决于下一步要做什么
} )
差不多吧。这将使用
role
属性将user\u roles
对象加载到用户中。一些文档这不是我试图实现的,这解决了角色问题,但更复杂的字段需要做其他事情。我提供了以下解决方案:摆脱书架,将我需要的一切都打包到存储过程中(比如通过登录获取用户详细信息),这允许我在一个SP调用中获取任何信息。非常有效是的,SP是另一种方法。很高兴你成功了!