【发布时间】:2019-08-25 00:25:48
【问题描述】:
我想删除日期晚于今天 - 7 并且状态类似于“已取消”的行。
如何为该原始查询创建等效的 Sequelize 范围:
SELECT `st_shipment_header`.`id`,
FROM `st_shipment_header` AS `st_shipment_header`
LEFT OUTER JOIN `st_shipment_event` AS `st_shipment_events` ON `st_shipment_header`.`id` = `st_shipment_events`.`stShipmentHeaderId`
WHERE (`st_shipment_header`.`id`
NOT IN
( SELECT `st_shipment_header`.`id` FROM `st_shipment_header` AS `st_shipment_header`
LEFT OUTER JOIN `st_shipment_event` AS `st_shipment_events` ON `st_shipment_header`.`id` = `st_shipment_events`.`stShipmentHeaderId`
WHERE (`st_shipment_events`.`date` < NOW() - INTERVAL 7 DAY ) AND (`st_shipment_header`.`shipmentStatus` LIKE 'Canceled%'))));
我已经尝试将这个作为 Sequelize 范围:
StShipmentHeader.addScope('test', {
include: [
{ model: models.st_shipment_event }
],
where: {
[Op.notIn]: {
[Op.and]: {
'models.st_shipment_event.date': {
[Op.lt]: new Date().setDate(new Date().getDate() - 7)
},
shipmentStatus: {
[Op.like]: '%Canceled%'
}
}
}
}
})
但看起来[Op.notIn] 不起作用...
【问题讨论】:
-
是因为
scope没有注册还是仅仅因为查询没有按预期工作?添加生成的 SQL 会更好。
标签: mysql sql node.js sequelize.js