如何在sequelize中使用ilike搜索整数

leo*_*ger 4 sequelize.js

如果我有以 12 作为输入的输入字段,我想搜索行 id = 123。现在我有

where: {
        id: {
          [Op.iLike]: `%${req.body.gaugeId}%`,
        },
      },
Run Code Online (Sandbox Code Playgroud)

如果我搜索文本字段,这有效,但它不适用于搜索整数字段。我知道这与铸造有关,但我可以找到一种方法来实现这一点。

leo*_*ger 6

想出了解决办法。我遇到了几个问题。

首先我不明白铸造是如何工作的。我需要投射一个续集列,并且要访问该列,您需要使用Model.column_name.

我遇到的第二个问题是因为我正在投射到string, 而不是varchar.

search(req, res) {
    return Gauge.findAll({
      where: sequelize.where(
        sequelize.cast(sequelize.col('Gauge.id'), 'varchar'),
        {[Op.iLike]: `%${req.body.gaugeId}%`}
      ),
    }).then(gauges => {
      res.status(200).send(gauges);
    });
  },
Run Code Online (Sandbox Code Playgroud)

如果您想使用sequelize.or,您可以执行以下操作:

return Gauge.findAll({
        attributes: ['id', 'stationName'],
        where: {
          [Op.or]: [
            {stationName: {[Op.iLike]: `%${req.body.keyWord}%`}},
            sequelize.where(
              sequelize.cast(sequelize.col('Gauge.id'), 'varchar'),
              {[Op.iLike]: `%${req.body.keyWord}%`}
            ),
          ],
        },
      })
Run Code Online (Sandbox Code Playgroud)

在这里您可以找到更多。 https://github.com/sequelize/sequelize/issues/3565