我有一个像以下一样的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适用的前缀?
我有什么方法可以解决这个问题。