【发布时间】:2016-09-05 19:32:15
【问题描述】:
您好,我在寻找最佳解决方案来查找和统计所有当前可供预订的汽车时遇到了问题。我的意思是 Car 模型和 Reservation 模型之间存在这样的关系:
Reservation.belongsTo(Car);
Car.hasMany(Reservation, {foreignKey: { allowNull: false }});
然后我需要找到用户在他/她选择的时间段内可以预订的所有汽车。例如让我们想象一下这种情况: 我们有 3 辆车 A、B、C 和:
汽车 A:现在有两个预订 - 从 10.10.2016 到 13.10.2016 和从 17.10.2016 - 18.10.2016
B 车:有一个预订 - 8.10.2016 - 11.10.2016
C 车:1 次预订 - 15.10.2016 - 16.10.2016
用户想要从 12.10.2016 到 16.10.2016 预订一辆车。
因此,他应该只收到一辆车可供选择:CAR B
我创建了这样的查询来得到这个结果:
var results = await Car.findAndCountAll({
include: [{
model: Reservation,
where: {
$not: {
$or: [
{
dateIn: {
$between: [chosenIn, chosenOut],
}
},
{
dateOut: {
$between: [chosenIn, chosenOut],
}
}
]
}
},
required: true
}],
});
但是当每辆车只有一个预订时,一切都很好。如果我显示结果将是从 17.10.2016 到 18.10.2016 可用预订的 Car Car B 和 Car A。我不知道为什么一辆有多个预订的汽车被视为“独立车身”而不是一辆汽车。很明显,这个查询选择了所有满足至少一个 Reservation 的汽车。仅当它们的所有预订均已满时,才应列出它们。但不幸的是,我无法通过这个 ORM 克服这个问题,我也无法在 Sequelize 文档中获得必要的信息。感谢您的帮助。
【问题讨论】:
标签: javascript mysql node.js orm sequelize.js