Sequelize:如何将字段定义为函数?

时间:2018-08-01 11:29:02

标签: 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.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方法。

1 个答案:

答案 0 :(得分:0)

我认为您需要的是插入之前的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;
    }
  }
});