Sequelize.js 对嵌套条件进行续集

Sequelize.js 对嵌套条件进行续集,sequelize.js,Sequelize.js,但结果显示 选择。。。从课程。。。 其中(课程开始时间=9)或(课程开始时间=10)) “我的天数”查询从一开始就发生了什么?您缺少一个顶级的“和”,其中包含“天数”部分和“开始时间/结束时间”部分。奇怪的是,你没有得到一个错误-也许starttime/endtime部分覆盖了days部分 稍后添加:测试确认第2条将覆盖第1条。e、 g const result = await models.courses.findAll({ where: { [op.or]: [

但结果显示

选择。。。从课程。。。 其中(
课程
开始时间
=9)或(
课程
开始时间
=10))


“我的天数”查询从一开始就发生了什么?

您缺少一个顶级的“和”,其中包含“天数”部分和“开始时间/结束时间”部分。奇怪的是,你没有得到一个错误-也许starttime/endtime部分覆盖了days部分


稍后添加:测试确认第2条将覆盖第1条。e、 g

const result = await models.courses.findAll({
    where: {
      [op.or]: [
        {
          days: { [op.like]: '%a%' },
        },
        {
          days: { [op.like]: '%b%' },
        },
      ],
      [op.or]: [
        {
          [op.and]: [
            {
              startTime: { [op.lte]: 9 },
            },
            {
              endTime: { [op.gte]: 9 },
            },
          ],
        },
        {
          [op.and]: [
            {
              startTime: { [op.lte]: 10 },
            },
            {
              endTime: { [op.gte]: 10 },
            },
          ],
        },
      ],
    },
  });

结果只有

where : {
   [Op.or] : [{id : 1},{id : 2}],  // 1st clause
   [Op.or] : [{id : 3},{id : 4}]   // 2nd clause  
}

需要有一个操作数连接两个或子句……

当前sequelize查询将生成以下sql查询:

WHERE id = 3 OR id = 4
WHERE id = 3 OR id = 4
SELECT * FROM courses
WHERE
  (days LIKE '%a%' OR days LIKE '%b%') AND
  (
    (startTime <= 9 AND endTime >= 9) OR
    (startTime <= 10 AND endTime >= 10)
  )
SELECT * FROM courses
WHERE
  (days LIKE ‘%a%’ OR days LIKE ‘%b%’) AND
  (startTime <= 9  AND 9  < endTime) OR
  (10 >= startTime AND 10 <= endTime)
const result = await models.courses.findAll({
    where: {
      [op.or]: [{
        [op.or]: [{
          days: { [op.like]: '%a%' },
        }, {
          days: { [op.like]: '%b%' },
        }],
        startTime: { [op.lte]: 9 },
        endTime: { [op.gte]: 9 }
      }, {
        startTime: { [op.lte]: 10 },
        endTime: { [op.gte]: 10 }
      }]
    },
  });