按列名称续订订单

时间:2016-03-15 15:18:58

标签: javascript node.js express sequelize.js

我正在尝试按照Sequelize中的列名来订购

这是我的模特

var Milestones = sequelize.define('milestones', {
  milestoneId: Sequelize.INTEGER,
  data: Sequelize.JSON,
  repository: Sequelize.STRING
});

数据库是PostegreSql 9.5

var dialect = 'postgres',
    protocol = 'postgres';

var sequelize = new Sequelize(dbConfig.database, dbConfig.user, dbConfig.password, {
  host: dbConfig.host,
  dialect: dialect,
  protocol: protocol,
  dialectOptions: {
    timeout: 30
  },
  pool: {
    max: 5,
    min: 0,
    idle: 30000,
    maxConnections: 5,
    maxIdleTime: 30
  },
  logging: false
});

这是我的查询

models.Milestones.findAll({
      where: {
        repository: req.body.repository
      },
      order: 'milestoneId'
    }).then(function (values) {
      // do something
    });

这是我的错误

Unhandled rejection SequelizeDatabaseError: column "milestoneid" does not exist

问题是我想按milestoneId订购,但Sequelize实际上是按milestoneid排序(注意缺少驼峰的情况)。

如果我按repository改变顺序一切正常,那么此时的问题似乎与Sequelize转换为小写有关。

除了将数据库中的列重命名为小写以外的任何建议吗?

谢谢

2 个答案:

答案 0 :(得分:1)

使用字段更新您的模型,它会没问题

var Milestones = sequelize.define('milestones', {
  milestoneId: {
    type: Sequelize.INTEGER,
    field: 'milestoneId'
  },
  data: Sequelize.JSON,
  repository: Sequelize.STRING
});

编辑:

还用

更新排序
order: ['milestoneId']

答案 1 :(得分:0)

我在PostGreSQL和Oracle(使用Sequelize-Oracle)方面遇到了类似的问题。 Sequelize会自动为许多参数添加引号。

您是否关闭了“quoteIdentifiers”选项? (默认打开)。

也许问题不在于:
- 按里程碑顺序或按里程碑顺序排列 但它可以是:
- 按'milestoneid'排序(引号引起问题)。

医生说:

  

[options.quoteIdentifiers = true]:Boolean,设置为false以使Postgres上的表名和属性不区分大小写并跳过它们的双引号。