node.js - sequelize 获取引用表的列值
问题描述
我有三张桌子会议、房间和项目
meetings.belongsTo(models.rooms, { foreignKey: "room_id" , targetKey: "id"});
rooms.hasMany(models.meetings, { foreignKey : "id", targetKey : "room_id"});
rooms.belongsTo(models.projects, { foreignKey: "project_id", targetKey: "id"});
projects.hasMany(models.rooms, {foreignKey:"id", targetKey:"project_id"});
id、room_id 和 project_id 是它们各自表的主键。我想找到特定会议 ID 的某些项目列的价值。如何使用 sequelize nodejs 编写单个查询来执行此操作?下面的查询需要使用给出正确结果的 sequelize 执行
select project_meta from projects p
inner join rooms r on p.id = r.project_id
inner join meetings m on r.id = m.room_id
where m.id = "QBZJ0TK7V6NFSPPWGFNCN";
写了以下
projects.findAll({
include: [{
model: rooms,
include: [{
model: meetings,
where: {
id: "QBZJ0TK7V6NFSPPWGFNCN"
}
}]
}],
attributes: ['project_meta']
}
但它正在执行不同的查询并给出意外的结果
关联有问题吗?
解决方案
您必须使用 SQL 连接(sequelize 的包含)
function myQuery(meetingId) {
let options = {};
options.attributes = ['column1', 'column2', ...]; // The specific arrtibutes you need.
options.include = [
{
model: RoomModel,
include: [
{
model: MeetingModel,
where: {
id: meetingId // The specific meeting id
}
}
]
}
];
ProjectModel.findAll(options);
}
推荐阅读
- javascript - 使用 AJAX 触发文件上传,无需表单或 Jquery
- c++ - 挂钩直接输入
- c# - 请向我解释为什么这不分配副本,而是分配指针?C#
- android - OkHttp 身份验证器刷新令牌循环
- python - 如何使用绑定动态更新 Kivy Label 的文本属性
- amazon-neptune - 我可以为 Neptune 使用预留实例或 Savings Plan 吗?
- java - 从双精度和布尔值数组中删除一个元素
- python - 如何使用 http 将字符串发送到 ESP32
- c# - 如何将移动应用程序连接到不同的服务器
- javascript - 在使用来自 firebase 的新数据刷新之前清除反应状态字段