2016-03-15 142 views
0

我试图通过列名SequelizeSequelize顺序按列名

这里订购是我的模型

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转换为小写字母有关。

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

谢谢

回答

1

更新你的模型的一个字段,它会被罚款

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

编辑:

也更新

order: ['milestoneId'] 
+0

这应该是工作,也应该是'milestoneId',而不是'milestonesId' – tyler

+0

字段实际上没有发挥作用,但改变顺序做了诀窍 –

0

排序我有一个类似PostGreSQL和Oracle问题(使用Sequelize-Oracle)。 Sequelize会自动为许多参数添加引号。

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

也许问题不在于:
- 为了通过milestoneid或ORDER BY milestoneId
但相反,它可以是:
- 为了通过 'milestoneid'(带引号引起的问题)。

的医生说:

[options.quoteIdentifiers =真]:布尔值,设置为false,使表名和Postgres的属性不区分大小写,并跳过双它们的报价。