Node.js 续集:如何将字段定义为函数?
我定义了以下模型:Node.js 续集:如何将字段定义为函数?,node.js,sequelize.js,Node.js,Sequelize.js,我定义了以下模型: const Project = sequelize.define('project', { version: { type: DataTypes.STRING, field: Sequelize.fn('concat', Sequelize.col('version_major'), '.', Sequelize.col('version_minor')) } }); 然后我尝试使用以下参数执行findAll: myProjectModel.find
const Project = sequelize.define('project', {
version: {
type: DataTypes.STRING,
field: Sequelize.fn('concat', Sequelize.col('version_major'), '.', Sequelize.col('version_minor'))
}
});
然后我尝试使用以下参数执行findAll
:
myProjectModel.findAll({
where: { version: '2.0' },
attributes: ['version']
});
但我得到了以下错误:
SequelizeDatabaseError: Unknown column '[object Object]' in 'where clause`
但是,如果删除where子句,则该属性可以正常工作。Sequelize在select子句中正确转换字段,但在where子句中错误转换字段:
SELECT concat(`version_major`, '.', `version_minor`) AS `version` FROM `project` WHERE `project`.`[object Object]` IN ('2.0');
有什么想法吗
getterMethods
不适用于findAll
方法。我认为您需要的是setter
方法,然后再插入:
const Project = sequelize.define('project', {
version: {
type: DataTypes.STRING,
set(val){
let version_major = this.setDataValue('version_major');
let version_minor = this.setDataValue('version_minor');
return version_major+'.'+version_minor;
}
}
});