协会会议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) { /* ... */ });
这在user
和project
之间创build了一个多对多的关系。 在user
和client
你有一个多对多的关系。 这不被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); });