2017-04-14 1 views
0

Ich versuche, das Produktmodell mit dem Benutzermodell zu verknüpfen und dabei sicherzustellen, dass die Synchronisierung erzwungen wird, um sicherzustellen, dass die neuesten Änderungen vorhanden sind. Ich bekomme den Fehler, dass Spalten UserId und ProductManagerId nicht erstellt werden.Sequelize-Assoziationsspalten nicht generiert

Warum werden die Spalten nicht automatisch generiert?

Product.js

'use strict'; 
/* Model ONLY for DePuy Products */ 
module.exports = function(sequelize, DataTypes) { 
    var Product = sequelize.define('Product', { 
    name: { 
     type: DataTypes.STRING, 
     allowNull : false 
    }, 
    sku: { 
     type:DataTypes.STRING, 
     allowNull: false, 
     primaryKey: true, 
    }, 
    }, { 
    classMethods: { 
     associate: function(models) { 
     Product.belongsTo(models.User,{ as : 'ProductManager'}); 
     // associations can be defined here 
     } 
    } 
    }); 
     Product.sync({force: true}).then(() => { 
     console.log('Sequelize forced'); 
     }) 

    return Product; 
}; 

user.js

module.exports = (sequelize, DataTypes) => { 
    const User = sequelize.define('User', { 
    id: { 
     type: DataTypes.INTEGER, 
     autoIncrement: true, 
     primaryKey: true, 
     allowNull: false, 
    }, 
    password: { 
     type: DataTypes.STRING, 
     allowNull: false, 
    }, 
    email: { 
     type: DataTypes.STRING, 
     unique: true, 
    }, 
    }, { 
    classMethods: { 
     associate: (models) => { 
     // associations can be defined here 
     User.hasMany(models.Product); 
     }, 
    }, 
    freezeTableName: true, 
    }); 
    // FORCE FOR NOW Use only if make model changes 
    User.sync({force: true}).then(() => { 
    console.log('Sequelize forced'); 
    }) 
    return User; 
}; 

Dialect: Postgres Sequelize Version: 3.30.1

Ps. Ich habe ursprünglich sequelize-cli verwendet, um die Modelldatei zu erstellen, und dann nach meinen Bedürfnissen geändert.

Antwort

0

Ich mag falsch (oder unzureichend informiert), aber das sieht aus wie ein Fehler für mich.

In jedem Fall können Sie Ihr Problem beheben, indem Sie die folgenden kleinen Änderungen in Ihren Modellen machen:

Benutzermodell:

// Note the addition of 'foreignKey' 
User.hasMany(models.Product, {as: 'ProductManager', foreignKey: 'ProductManagerId'}); 

Auch in den Modellen:

// Note the addition of 'foreignKey' 
Product.belongsTo(models.User,{ as : 'ProductManager', foreignKey: 'ProductManagerId'}); 

Jetzt , Ihre Produkttabelle sollte eine FOREIGN KEY (ProductManagerId) REFERENCES user (id) haben und Sie sollten bereit sein zu gehen.