sequelize.js - Sequelize : How to make relationship between 3 tables

标签 sequelize.js

如果您有以下实体:用户、角色、组织。
您希望设置关系,以便每个用户都有一个组织角色。

简单地说,每个用户可以属于多个组织,并且用户在每个组织中都有特定的角色。

您将如何使用 Sequelize 对此进行建模?

我尝试创建一个名为 organization_users 的连接表,然后在该表中添加一个 organizationUsers.belongsTo(role);
从我读过 Sequelize 不支持连接表上的关联,因此该解决方案不起作用。

问候,
埃米尔

最佳答案

Sequelize 确实支持连接表上的关联。您应该查看“通过”选项 here >

例子 :

const Asso_Organization_User = sequelize.define('Asso_Organization_User', {
    id: DataTypes.STRING,
    userId: DataTypes.STRING,
    organizationId: DataTypes.STRING
});
User.Organizations = User.belongsToMany(Organization, {
    through: Asso_Organization_User,
    foreignKey: 'userId',
    otherKey: 'organizationId',
    as: 'organizations'
})

但是您的情况有点特殊,我没有看到使用 sequelize 获取用户、其所有组织以及他在同一查询中对每个组织的角色的方法。
看起来目前还没有解决方案,基于这个问题:https://github.com/sequelize/sequelize/issues/6671

也许您可以通过两个查询来完成:获取所有组织和所有角色,然后将它们与代码合并。

实际上,我看到了另一个解决方案:
const Asso_Organization_User = sequelize.define('Asso_Organization_User', {
    id: DataTypes.STRING,
    userId: DataTypes.STRING,
    organizationId: DataTypes.STRING
});
User.Organizations = User.belongsToMany(Organization, {
    through: Asso_Organization_User,
    foreignKey: 'userId',
    otherKey: 'organizationId',
    as: 'organizations'
})

该模型如下所示:
User: id
Role: id, userId, organizationId
Organizations: id
Asso_Organization_User: id, userId, organizationId

然后 :
User.Organizations = User.belongsToMany(Organization, {
    through: Asso_Organization_User
})
Organization.Roles = Organization.haMany(Role, {
    foreignKey: 'organizationId'
})

然后你应该能够查询:
   User.findAll({
        include: [ {
            model: Organization,
            include: {
                model: Role  
            }
        } ]
        where: {
            'role.userId': Sequelize.col("User.id")
        }
    });

我不完全确定确切的语法,但将 Sequelize.col 与 hasMany 结合应该可以工作。但要小心,如果你不添加这个 where 子句,这将返回每个组织的所有角色(对于在这个组织中拥有角色的每个用户)。

关于sequelize.js - Sequelize : How to make relationship between 3 tables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533572/

相关文章:

postgresql - 使用 where 条件进行更快的 Postgres 计数

sequelize.js - this.getDataValue 不是函数 - 模型 sequelize v.5

mysql - 使用 MAMP 进行 Sequelize 和 MySQL,出现错误

javascript - 通过列中的唯一值来限制限制

node.js - 如何正确处理nodejs中的异步错误

postgresql - 对生成无效查询的 JSONB 对象进行后续 Postgres 查询

node.js - 如何在 Hapi 中正确处理错误?

mysql - 使用 Sequelize 从文件插入 Node.js 数据库

javascript - GraphQL 和 Sequelize 不返回插入的对象

node.js - Sequelize v6 - TypeError : sequelize. import is not a function