按列名排序

Sequelize order by column name

我试图在 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 转换为小写有关。

除了将数据库中的列重命名为小写外,还有什么建议吗?

谢谢

用一个字段更新你的模型就可以了

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

编辑:

同时更新排序

order: ['milestoneId']

我对 PostGreSQL 和 Oracle(使用 Sequelize-Oracle)也有类似的问题。 Sequelize 自动为许多参数添加引号。

您是否关闭了 "quoteIdentifiers" 选项? (默认开启)。

也许问题不在于:
- 按 milestoneid 或按 milestoneId
排序 但它可以是:
- 按 'milestoneid' 排序(引号导致问题)。

文档说:

[options.quoteIdentifiers=true] : Boolean, Set to false to make table names and attributes case-insensitive on Postgres and skip double quoting of them.