2016-11-19 34 views
0

我試圖使用Seqelize和Postgresql將具有外鍵約束的user_id列添加到Node Express中的Todo表。 我收到一條錯誤消息,說「未處理的拒絕SequelizeDatabaseError:列」UserId「不存在」。正如你所看到的,SELECT查詢中有「userId」和「UserId」。 "Unhandled rejection SequelizeDatabaseError: column "UserId" does not exist"使用Sequelize中的遷移添加具有外鍵約束的表列使用Sequelize中的遷移

SELECT查詢由簡單的Todo.findAll()構建。 我相信這件事情錯在我如何遷移文件20161116202040 - 添加用戶ID到todos.js

module.exports = { 
    up: function (queryInterface, Sequelize) { 
    return queryInterface.addColumn(
     'Todos', 
     'userId', { 
     type: Sequelize.INTEGER, 
     references: { 
      model: 'Users', 
      key: 'id'}})}, 

的模型/ user.js的看起來像這樣創建外鍵約束上:

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('User', { 
    email: DataTypes.STRING, 
    password: DataTypes.STRING 
    }, { 
    classMethods: { 
     associate: function(models) { 
     User.hasMany(models.Todo);}}}); 
    return User;}; 

模型/ todo.js看起來是這樣的:

module.exports = function(sequelize, DataTypes) { 
    var Todo = sequelize.define('Todo', { 
    name: DataTypes.STRING, 
    userId: DataTypes.INTEGER 
    },{ 
    classMethods: { 
     associate: function(models) { 
     Todo.belongsTo(models.User); }}}); 
    return Todo;}; 

回答

2

Sequelize有辦法的相關模型通過模型名稱相關聯。

因此,例如

var User = sequelize.define('user', { ... }); 
var Todo = sequelize.define('todo', { ... }); 

Todo.belongsTo(User); 

// Will create/use `userId` in Todo table 

但在你的情況

,你必須在表名作爲首都:

var User = sequelize.define('User', { ... }); 
var Todo = sequelize.define('Todo', { ... }); 

Todo.belongsTo(User); 

// Will create/use `UserId` in Todo table 

所以你的情況,你可以重命名userIdUserId或明確指定的外鍵像

Todo.belongsTo(models.User, { foreignKey: "userId" }); 
+0

謝謝。我想到了。在我看來,你還必須添加ForeignKey:「userId」User.hasMany調用權? – Andreas

相關問題