我有一个带有IsBoolean
字段的数据库。
IsBoolean可以是1
或0
。
但是在Javascript / Typescript中,我有true
或false
。比较方便。
我添加了getter以在Javascript中使用纯布尔值。
我添加了setter以将数据库转换为0/1。
型号:
const Employee = function(sequelize, DataTypes) {
return sequelize.define('employee', {
// ...Id...
IsBoolean: {
type: DataTypes.INTEGER, // Bit: 0 or 1
allowNull: false,
get() {
const value = this.getDataValue('IsBoolean');
return !!value; // from number to boolean
},
set(value) {
// from boolean to number
this.setDataValue('IsBoolean', +value);
},
},
}, {
tableName: 'employee'
});
};
现在我搜索实例:
Employee.findOne(
{
where: {
// getter is not being invoked
// IsBoolean: true, // doesn't work, Conversion failed
IsBoolean: 1, // works because I pass number
},
},
).then((data) => {
const result = data.get({ plain: true }); // getter works
});
// setter works
Employee.update(
{ IsBoolean: false },
{ where: {Id: 100} },
);
当我使用get({ plain: true })
时,Getter可以工作。
设置器适用于update(..)
操作。
但是getter在where
(和另一个运算符)中不起作用。
有什么方法可以在where
内部激发吸气剂?
function propagateRequired(instance) {
instance.where.IsBoolean = !!instance.where.IsBoolean;
}
hooks: {
beforeFind: propagateRequired
}
但是我认为这太困难了。
答案 0 :(得分:0)
结果,我使用了beforeFind钩子
var element = document.getElementById('div-to-render');
html2canvas(element, { allowTaint : true }).then((canvas) =>
{
canvas.getContext('2d');
var image = canvas.toDataURL('image/jpeg', 1.0);
});
对于getter / setter来说,我可以使用
function propagateRequired(instance) {
// or add another operators (in, like)
instance.where.IsBoolean = !!instance.where.IsBoolean;
}
hooks: {
beforeFind: propagateRequired
}
和getterMethods
或在每个字段定义中获取/设置(请参阅我的问题)。