sequelize.js - 使用附加联结表属性查询多对多关系
问题描述
我有三个模型,用户,单位和排名
- 一个User可以属于多个Unit
- 一个单元可以有多个用户
- 一个用户在一个单元上有一个等级
我选择将此建模为标准的多对多关系,其中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 }
}
]
});
}
}
任何帮助都感激不尽!
解决方案
推荐阅读
- html - vb.net运行apication服务器端?
- angular - 在应用内导航时将数据传递到子路由,或在直接导航时使用解析器
- sql - 如何在线将 .sql / .xml 转换为 .erwin?
- c# - Azure Pipeline VSTest@2 Task 认为以“Tester”结尾的项目是测试项目
- python - popen 使用后台进程将标准输出写入文件和 shell
- java - 在 Java 中查找和编辑 ArrayList
- tensorflow - 多输出自定义keras ResNet50模型;ValueError:图表已断开连接
- php - api 端点未在 Sanctum 上进行 CSRF 令牌验证 - CSRF 令牌不匹配
- javascript - 在关闭 chrome 中的弹出窗口之前需要运行一些代码
- mongodb - 我正在尝试将 Docker 上的 BI 连接器实例连接到 Mongo Atlas 中的数据库