首页 文章

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

提问于
浏览
0

我定义了以下模型:

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

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

相关问题