在这种情况下,我想知道如何使用'或'运算符:
getOrderDeadline(order) {
return order.getDeadlines({
limit: 1,
where: {
'$OrdersDeadlines.initialDate$': { [this.Sequelize.Op.lte]: new Date() },
'$OrdersDeadlines.finishDate$': { [this.Sequelize.Op.gte]: new Date() },
},
order: [['situationId', 'DESC']],
});
}
我需要在当前日期之内得到一个截止日期,但有时截止日期可能有不确定的日期,在 finishDate 列中为 null 值。因此,我需要使用'或'运算符。
答案 0 :(得分:1)
您应通过以下方式使用or运算符:
getOrderDeadline(order) {
const Op = this.Sequelize.Op;
const now = new Date();
return order.getDeadlines({
limit: 1,
where: {
[Op.or]: [
[Op.and]: [
{'$OrdersDeadlines.initialDate$': { [Op.lt]: now }},
{'$OrdersDeadlines.finishDate$': { [Op.gt]: now }},
],
{'$OrdersDeadlines.initialDate$': { [Op.lt]: now }},
]
},
order: [['situationId', 'DESC']],
});
}
根据您的评论进行了更新。顺便说一句:正如您所说的“ <”,我使用的是Op.gt和Op.lt,而不是Op.gte和Op.lte。
此外,这对应于您想要的以下查询:
( initialDate < currentDate and finishDate > currentDate )
or ( initialDate < currentDate )
与( initialDate < currentDate )
答案 1 :(得分:0)
好吧,基于@PhilippeAuriach的答案,我解决了我的问题。所以我将解释为什么我使用下面的代码。在我们的应用程序中,一个订单具有情境,一个情境表示该订单的当前状态,并且有很多截止日期,对于情境和截止日期,我们有一个具有 Name 和 ID 的表格em>。因此,我将选择范围限制为一个,并以最后一种情况获得该行,但是有时,截止日期可能没有确定的完成日期。我不了解如何使用运算符,对我来说有点困惑,但是现在我发现我需要在Sequelize中使用运算符包装条件。所以这是代码:
getOrderDeadlines(order) {
const Operator = this.Sequelize.Op;
const currentDate = new Date();
return order.getDeadlines({
limit: 1,
where: {
[Operator.or]: [
{
'$OrdersDeadlines.initialDate$': { [Operator.lte]: currentDate },
'$OrdersDeadlines.finishDate$': { [Operator.gte]: currentDate },
},
{
'$OrdersDeadlines.initialDate$': { [Operator.lte]: currentDate },
'$OrdersDeadlines.finishDate$': null,
},
],
},
order: [['situationId', 'DESC']],
});
}
@PhilippeAuriach,谢谢。