2015-11-16 46 views
4

我有一個使用Sequelize的node.js應用程序。我目前正在將SQLite作爲輕鬆開發設置和測試的目標,但將轉向MySQL進行生產。我使用sequelize-cli來創建模型和遷移,所有工作都沒有任何問題,我已經確認這些表是使用SQLite瀏覽器工具創建的。我現在遇到的問題是運行我下面的種子文件時(數據庫當前爲空),我收到以下錯誤。種子期間的SequelizeUniqueConstraintError

錯誤:

Unhandled rejection SequelizeUniqueConstraintError: Validation error 
at Query.formatError (/Users/abc/repos/myProject/node_modules/sequelize/lib/dialects/sqlite/query.js:231:14) 
at Statement.<anonymous> (/Users/abc/repos/myProject/node_modules/sequelize/lib/dialects/sqlite/query.js:47:29) 
at Statement.replacement (/Users/abc/repos/myProject/node_modules/sqlite3/lib/trace.js:20:31) 

遷移:

​​

模型:

'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var Question = sequelize.define('Question', { 
    id: { 
     allowNull: false, 
     autoIncrement: true, 
     primaryKey: true, 
     type: DataTypes.INTEGER 
    }, 
    type: { 
     allowNull: false, 
     type: DataTypes.INTEGER 
    }, 
    text: { 
     allowNull: false, 
     type: DataTypes.STRING 
    }, 
    nextQuestionId: { 
     type: DataTypes.INTEGER 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     Question.belongsTo(Question, {as: 'nextQuestion', foreignKey: 'nextQuestionId'}); 
     Question.hasMany(models.Answer); 
     Question.hasMany(models.questionoption, {as: 'options'}); 
     } 
    } 
    }); 
    return Question; 
}; 

種子:

'use strict'; 
module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.bulkInsert('Questions', [ 
     {type: 0, text: 'Question A'}, 
     {type: 5, text: 'Question B', nextQuestionId: 4}, 
     {type: 5, text: 'Question C', nextQuestionId: 4}, 
     {type: 0, text: 'Question D'}, 
     {type: 0, text: 'Question E'}, 
     {type: 0, text: 'Question F'}, 
     {type: 0, text: 'Question G'}, 
     {type: 0, text: 'Question H'}, 
     {type: 0, text: 'Question I'} 
    ], {}); 
    } ... 

我已經試過尋找文檔和谷歌搜索答案,似乎沒有任何暗示這是一個共同的問題。我沒有定義任何獨特的列(當然除了主鍵,但它是一個autoIncrement)如果我有更多的信息或線索,哪些列導致cli問題,那麼我至少可以嘗試一些不同的事情,但沒有幫助。我試過在SQL中手動運行等效插入,並且它們工作,所以我不認爲這是DB拒絕插入,它似乎是Sequelize內部的東西。

任何幫助將不勝感激,因爲我一直在嘗試一些選擇幾天沒有運氣。

回答

11

該錯誤似乎是非常令人誤解的。解決方案,無論是否正確,我都不確定,但是將createdAt和updatedAt屬性添加到對象允許它們成功播種。我的假設是這些將由ORM自動處理。工作的種子看起來像這樣(不改變任何模型或遷移)。

'use strict'; 

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.bulkInsert('Questions', [ 
     {type: 0, text: 'Question A', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 5, text: 'Question B', nextQuestionId: 4, createdAt: new Date(), updatedAt: new Date()}, 
     {type: 5, text: 'Question C', nextQuestionId: 4, createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question D', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question E', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question F', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question G', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question H', createdAt: new Date(), updatedAt: new Date()}, 
     {type: 0, text: 'Question I', createdAt: new Date(), updatedAt: new Date()} 
    ], {}); 
    }, ... 
0

有同樣的問題。 我加了丟失createdAtupdatedAt列,但錯誤仍然存​​在。 我在bulkInsert函數的末尾丟失了;

相關問題