2016-03-15 141 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的屬性不區分大小寫,並跳過雙它們的報價。