如果id具有自定义getter,则sequelize updateAttributes将失败。如何使它忽略getter附加的前缀

时间:2016-08-21 14:38:10

标签: node.js sequelize.js

我有一个像以下一样的Sequelize模型:

 var BinaryParam = sequelize.define('BinaryParam', {
id: {
  type: DataTypes.INTEGER,
  autoIncrement: true,
  primaryKey: true,
  get: function() {
    return "b"+this.getDataValue('id').toString();
  }
},
name: DataTypes.STRING,
description: DataTypes.TEXT,
nominal_value: DataTypes.BOOLEAN,
in_use: {
  type: DataTypes.BOOLEAN,
  defaultValue: true
}

请注意,我在id字段上有一个自定义getter,它在id前面加上'b'。

我需要在这个模型的实例上更新一个属性,并且正在对id进行查找(上面没有'b'前缀),如果找到,我正在尝试对其进行更新:

models.BinaryParam.find({
            where: {
                id: id
            }
        }).then(function (param) {
            console.log('we found a param:', param);
            if (param) {
                    param.updateAttributes({
                    in_use: in_use
                }).then(function (param) {
                    callback(param);
                }).catch(function (error) {
                   console.log("Problem updating attribute:", error)
                });
            }
        });

正在发生的事情是更新查询正在尝试使用b前缀进行更新,并且根本不会影响mysql中的行。

sequelize尝试运行的查询是:

Executing (default): UPDATE `BinaryParams` SET `in_use`=false,`updatedAt`='2016-08-21 14:20:34' WHERE `id` = 'b1'

请注意,尝试更新时,它尝试在WHERE中使用“b1”。这失败了,因为在mysql表中,id字段是一个自动递增的整数 - 即在这种情况下,它只有一个1,并且它没有前缀'b'。

我们如何要求updateAttributes忽略getter适用的前缀?

我有什么方法可以解决这个问题。

0 个答案:

没有答案