2016-11-19 2 views
0

Ich versuche, eine Today-Tabelle in Node Express mithilfe von Sequelize with Postgresql mit einer Fremdschlüsseleinschränkung zu ergänzen. Ich erhalte die Fehlermeldung "Unbehandelte Ablehnung SequelizeDatabaseError: Spalte" UserId "existiert nicht". Wie Sie sehen können, gibt es sowohl "userId" als auch "UserId" in der SELECT-Abfrage. "Unhandled rejection SequelizeDatabaseError: column "UserId" does not exist"Hinzufügen von Tabellenspalte mit Fremdschlüsseleinschränkung mithilfe von Migrationen in Sequelize

Die SELECT-Abfrage wird von einem einfachen Todo.findAll() erstellt. Ich glaube, es ist etwas falsch, wie ich die Fremdschlüssel contraints in der Migrationsdatei 20161116202040-add-user-id-to-todos.js

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

Die Modelle/user.js wie folgt erstellen aussieht:

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;}; 

die Modelle/todo.js sieht wie folgt aus:

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;}; 

Antwort

2

Sequelize eine Art und Weise hat die entsprechenden Modelle über den Modellnamen zuzuordnen.

So zum Beispiel

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

Todo.belongsTo(User); 

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

Aber in Ihrem Fall, in dem Sie den Namen der Tabelle als Hauptstädte haben:

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

Todo.belongsTo(User); 

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

So in Ihrem Fall können Sie entweder umbenennen userId zu UserId oder explizit die foreignKey angeben wie

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

Danke. Ich habe es herausgefunden. Es scheint mir, dass Sie auch die Benutzerkennung "userId" hinzufügen müssen. – Andreas

Verwandte Themen