首页 > 解决方案 > Sequelize Parens 在 WHERE 子句中

问题描述

我有一个看起来像这样的 WHERE 子句。

WHERE (`version` = FALSE
       OR (name LIKE '%8%')
       OR (name LIKE '%9%')
       AND (sId IN (1)))

我需要它看起来像这样。

WHERE (`version` = FALSE
       OR (name LIKE '%8%')
       OR (name LIKE '%9%'))
       AND (sId IN (1))

我正在使用 where.push ,但我似乎无法弄清楚。

续集代码。

where.push(version: false)
where.push(Sequelize.literal(`OR (name LIKE '%${id1}%')`)
where.push(Sequelize.literal(`OR (name LIKE '%${id2}%')`)
where.push({sId: {$in: sIds}})

标签: sqlsequelize.jswhere-clause

解决方案


如果您可以使用某些运算符编写此类条件,请不要使用Sequelize.literal(绝对不要尝试自己在字符串中组合此类条件以避免 SQL 注入)Op。在您的情况下,您可以使用Op.orOp.like运算符:

where = {
  [Op.or]: [{
    version: false,
  }, {
    name: {
      [Op.like]: `%${id1}%`
    }
  }, {
    name: {
      [Op.like]: `%${id2}%`
    }
  },
  ],
  sId: {
   [Op.in]: sIds
  }
}

推荐阅读