我正在尝试按照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转换为小写有关。
除了将数据库中的列重命名为小写以外的任何建议吗?
谢谢
答案 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上的表名和属性不区分大小写并跳过它们的双引号。