我有4张桌子
- client
- project
- user
- userProject
一个项目属于客户端,它需要客户端外键client_id。
UserProject具有project_id和user_id外键,属于项目和用户。
一个用户拥有他的项目的客户。
答案 0 :(得分:8)
我想知道您可以使用eager loading中的sequalize功能:
Client.findAll({
include: [{
model: Project,
include: [{
model: User,
where: {
id: <UserId>
},
required: false
}]
}]
}).then(function(clients) {
/* ... */
});
答案 1 :(得分:2)
这会在user
和project
之间创建多对多关系。在user
和client
之间,你有一个多对多的关系。 sequelize不支持此功能。我会在User
模型上创建一个实例方法,如下所示:
User = sequelize.define('user', {
// ... definition of user ...
},{
instanceMethods: {
getClients: function() {
return this.getProjects().then(function (projects) {
var id_map = {};
for (var i = 0; i < projects.length; i++) {
id_map[projects[i].clientId] = 1;
}
return Client.findAll({
where: { id: [Object.keys(id_map)] }
});
});
}
}
});
然后在拥有这样的用户实例时调用此函数来获取客户端:
user.getClients().then(function (clients) {
console.log(clients);
});