Sequelize / Node - Concat为null值

时间:2018-01-31 15:54:20

标签: mysql node.js sequelize.js

我正在尝试将数字“2”连接到一行中有时可能为null的值。其他时候,它将是一个字符串。我正在使用Sequelize.fn方法来连接'2',但是在值为null的情况下,它不会执行任何操作。具体来说,它仍然是空的,并没有像我预期的那样变成'2'。如果该值不为null,而是一个字符串,则它可以工作。我通过检查数据库本身的结果值来确认这一点。还有另一种方法可以使用Sequelize连接到空值吗?

这是尝试连接到null的代码,简化:

mysql.determineDatabase('db-name', 'table-name').then((database) => {
  database.sequelize.sync().then(() => {
    database.table_name.update({
      code: Sequelize.fn('concat', Sequelize.col('code'), 2)
    }, { where: { code: req.body.code }
    }).then((result) => {
      res.status(200).send({ ... });
    }).catch((error) => {
      res.status(400).send(error);
    });
  });
}); 

1 个答案:

答案 0 :(得分:0)

万一有人偶然发现这个问题并需要答案,我最终会这样做而不是尝试使用sql函数:

mysql.determineDatabase('db-name', 'table-name').then((database) => {
  database.sequelize.sync().then(() => {
    database.table_name.findAll({ where: { code: req.body.code } })
      .then((response) => {
        const code = response[0].dataValues.code;
        const concatenatedCode = code === null ? 2 : `${code}2`;
        database.table_name.update({
          code: concatenatedCode
        }, { where: { code: req.body.code }
        }).then((result) => {
          res.status(200).send({ ... });
        }).catch((error) => {
          res.status(400).send(error);
        });
      });
  });
});

基本上,我只是通过.findAll()获取之前的值。如果返回的值是null,我将其替换为2,否则,我将结束2.