我在我的项目中使用MySQL数据库。问题考虑复杂的查询,其中 Sequelize 无法正确检测关系。
我有 4 张 table :
Post_code | Building | Flat | Invoice
它们是一对多的关系,如下图所示:
这是我想要执行的 SQL 查询:
SELECT
CONCAT(building.name, ' ', flat.number) as 'buildingInfo',
CONCAT(building.address,' ',post_code.city,' ',post_code.code) as
'address',
IFNULL(invoice.date,'Unknonw') as 'lastInvoiceDate'
FROM building
INNER JOIN post_code ON post_code.id = building.post_code_id
INNER JOIN flat ON building.id = flat.building_id
LEFT JOIN invoice ON flat.id = invoice.flat_id;
连续查询:
models.building.findAll({
attributes:
[
[Sequelize.fn("CONCAT", Sequelize.col("building.name"),'
',Sequelize.col("flats.number")),'buildingInfo'],
[Sequelize.fn("CONCAT",Sequelize.col("building.address"),'
',Sequelize.col("post_code.city"),'
',Sequelize.col("post_code.code")),'address'],
[Sequelize.fn("IFNULL",Sequelize.col("invoice.date"),'Unknown'),
'lastInvoiceDate']
],
include:
[
{
model: models.flat,
required: true
},
{
model: models.post_code,
required: true
},
{
model: models.invoice,
required: false
}
]
}).then(function (data){
// Something here
});
问题考虑:“LEFT JOIN发票ON flat.id =发票.flat_id;”
我收到错误消息,“发票”与“建筑物”无关。
这是事实,因为这种关系没有在构建模型中定义,它仅与 post_code 和 flat 有联系,但当我执行 JOIN 时,我也可以“通过”平面表包含发票表。
如何使用 Sequelize 包含此表?
最佳答案
您的发票
模型应包含在平面
模型中,如下所示。
{
model: models.flat,
required: true,
include : [{
model: models.invoice
required : false
}]
}
关于mysql - Express js + Sequelize 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49035825/