协会会议3个桌子,多到很多

我有4张桌子

- client - project - user - userProject 

一个项目属于客户端,它需要有客户端外键client_id。

UserProject有project_id和user_id外键,属于项目和用户。

一个用户拥有他的项目的客户。

  • 我如何列出一个用户的客户?

我想知道你可以使用sequalize的 急切加载function:

 Client.findAll({ include: [{ model: Project, include: [{ model: User, where: { id: <UserId> }, required: false }] }] }).then(function(clients) { /* ... */ }); 

这在userproject之间创build了一个多对多的关系。 在userclient你有一个多对多的关系。 这不被sequelize支持。 我将在User模型上创build一个实例方法,如下所示:

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