[英]Join on specific columns using Sequelize.js
我正在尝试使用 Sequelize.js 在特定列上连接一些表。
到目前为止,我的代码是这样的:
table_1.findall({
include: [{
model: table_2
attributes: ['id', 'another_id']
include: [{
model: table_3
required: true
attributes: ['time']
}]
}]
})
其中每个表的主键是“id”。
这似乎等同于以下 SQL(为简洁起见,我显示 SELECT *,因为这不是本问题的重点):
SELECT *
FROM table_1 as t1
LEFT OUTER JOIN table_2 as t2 ON t1.id = t2.t1_id
INNER JOIN table_3 as t3 ON t2.id = t3.t2_id
我想要一些类似的东西:
SELECT *
FROM table_1 as t1
LEFT OUTER JOIN table_2 as t2 ON t1.id = t2.t1_id
INNER JOIN table_3 as t3 ON t2.another_id = t3.t2_id
有没有办法强制 t2 和 t3 之间的连接使用 t2 的主键以外的东西?
我在Sequelize 文档中找到了 [options.include[].on] ,但不知道提供我自己的 ON 条件的语法是什么。
您想在关联本身中定义特殊情况的外键名称,在模型的classMethods
部分中定义。 这是一个表的示例,该表两次连接到users
表,并具有特殊命名的外键:
classMethods: {
associate(models) {
this.belongsTo(models.user, {
foreignKey: 'created_by_user_id',
as: 'created_by',
});
this.belongsTo(models.user, {
foreignKey: 'updated_by_user_id',
as: 'updated_by',
});
},
},
然后,在您的findAll
,无需执行任何特殊操作 - sequelize 将知道要自动使用哪个外键列。
你也可以在你的代码/控制器文件中提到这样:
const storeModel = model.store;
const bookedTicketModel = model.booked_ticket;
bookedTicketModel.belongsTo (storeModel, {foreignKey: 'storeId'});
storeModel.hasMany (bookedTicketModel, {foreignKey: 'id'});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.