首页 > 解决方案 > 使用附加联结表属性查询多对多关系

问题描述

我有三个模型,用户单位排名

我选择将此建模为标准的多对多关系,其中Rank属性存储在UserUnit “通过”关系中。

模型定义的相关部分如下:

用户:

User.associate = function(models) {
    models.User.belongsToMany(models.Unit, { through: 'UserUnit' });
};

单元:

Unit.associate = function(models) {
    models.Unit.belongsToMany(models.User, { through: 'UserUnit' });
};

用户单位:

UserUnit.associate = function(models) {
    models.UserUnit.belongsTo(models.UserRank);
};

这创建了我认为正确的数据库模式(虽然现在看,我意识到 UnitId/UserId/UserRankId 可以是复合主键,而不是使用 ID):

                                   Table "UserUnits"
   Column   |           Type           | Collation | Nullable |                 
Default                 
------------+--------------------------+-----------+----------+-----------------------------------------
 id         | integer                  |           | not null | nextval('"UserUnits_id_seq"'::regclass)
 createdAt  | timestamp with time zone |           | not null | 
 updatedAt  | timestamp with time zone |           | not null | 
 UnitId     | integer                  |           |          | 
 UserId     | integer                  |           |          | 
 UserRankId | integer                  |           |          | 
Indexes:
    "UserUnits_pkey" PRIMARY KEY, btree (id)
    "UserUnits_UnitId_UserId_key" UNIQUE CONSTRAINT, btree ("UnitId", "UserId")
Foreign-key constraints:
    "UserUnits_UnitId_fkey" FOREIGN KEY ("UnitId") REFERENCES "Units"(id) ON UPDATE CASCADE ON DELETE CASCADE
    "UserUnits_UserId_fkey" FOREIGN KEY ("UserId") REFERENCES "Users"(id) ON UPDATE CASCADE ON DELETE CASCADE
    "UserUnits_UserRankId_fkey" FOREIGN KEY ("UserRankId") REFERENCES "UserRanks"(id) ON UPDATE CASCADE ON DELETE SET NULL

所以我的问题是:

我怎么能问“向我展示一个单位的所有用户及其相关等级” (不是来自 UserUnits 模型的 ID,来自UserRanks模型的“名称”属性,因此遍历关系)

我确切地知道如何使用 SQL 来执行此操作,但我很难在 Sequelize 中将其可视化。如果有帮助,这就是我目前获得所有单位用户的方式:

Unit: {
    members(unit, args, { Models }) {
        return Models.User.findAll({
            include: [
                {
                    model: Models.Unit,
                    where: { id: unit.id }
                }
            ]
        });
    }
}

任何帮助都感激不尽!

标签: sequelize.js

解决方案


推荐阅读