如何在续集中使用“或”运算符?

时间:2018-07-18 13:11:05

标签: sequelize.js

在这种情况下,我想知道如何使用'或'运算符:

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 值。因此,我需要使用'或'运算符。

2 个答案:

答案 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,谢谢。