gpt4 book ai didi

javascript - Sequelize : call getters inside where operator

转载 作者:行者123 更新时间:2023-12-03 22:38:50 25 4
gpt4 key购买 nike

我有 IsBoolean 的数据库 field 。
IsBoolean 可以是 10 .
但在 Javascript/Typescript 我有 truefalse .它更方便。

我添加了 getter 以在 Javascript 中使用纯 bool 值。
我添加了 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 内部发射 setter/getter ?

作为变体,我可以使用 BeforeFind 钩子(Hook):
function propagateRequired(instance) {
instance.where.IsBoolean = !!instance.where.IsBoolean;
}

hooks: {
beforeFind: propagateRequired
}

但是我觉得太难了。

最佳答案

结果,我使用了 beforeFind 钩子(Hook)

function propagateRequired(instance) {
// or add another operators (in, like)
instance.where.IsBoolean = !!instance.where.IsBoolean;
}

hooks: {
beforeFind: propagateRequired
}

对于 getter/setter,我可以使用
  • getterMethodssetterMethods在模型选项
  • 或在每个字段定义中获取/设置(请参阅我的问题)。
  • 关于javascript - Sequelize : call getters inside where operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750801/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com