2017-07-06 3 views
0

Ich habe ein Projekt, das ich versuche, Sequelize auf zu verwenden. Es erstellt die Datenbank und Tabellen fein, aber es findet nie die assoziierte Klassenmethode, so dass es nie die assoziative Methode aufruft.Sequelize Associate nicht gefunden

Dieser Code funktioniert einwandfrei, um die Tabellen zu erstellen (mithilfe der Importmethode), aber Object.keys (db) iteriert über jedes Modell, findet jedoch nie die zugehörige Methode.

fs.readdirSync('./models') 
    .filter(function (file) { 
     return (file.indexOf('.') !== 0) && (file !== 'index.js') && (file.indexOf('.js') > 0) && (file.indexOf('relations.js') !== 0); 
    }) 


    .forEach(function (file) { 
     var model = sequelize.import('../models/' + file); 
     db[model.name] = model; 
    }); 

Object.keys(db).forEach(function (modelName) { 
     if (db[modelName].associate) { 
      db[modelName].associate(db); 
      console.log('true'); 
     } 
     else { 
      console.log('false'); 

     } 
    } 
); 

Class Code-Beispiel:

module.exports = function (sequelize, Datatypes) {

let userModel = sequelize.define('user', { 
    id: { 
     type: DataTypes.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    email: { 
     type: DataTypes.STRING, 
     validate: { 
      isEmail: true 
     }, 
     allowNull: false 
    } 
}, { 
    classMethods: { 
     associate: function (models) { 
      let createdByoptions = { 
       foreignKey: 'createdByUserID' 
      }; 
      let emailOptions = { 
       foreignKey: 'emailAddressID' 
      }; 

      userModel.hasOne(models.user, createdByoptions); 
      userModel.hasOne(models.email, emailOptions) 

      //userModel.hasMany(models.tenant, {foreignKey: 'id'}); 

     }, 
     addUser: function (identityID) { 
      userModel.create({identityUserID: identityID}); 
     } 
    } 
}); 


return userModel; 

};

+0

Welche Version von sequelize sind Sie auf – Shivam

+0

Sie müssen auch 'as' verwenden, da Sie den Benutzer mit sich selbst verbinden – Shivam

+0

Ich benutze 4.2.1. – Bryce

Antwort

1

Sequelize hat die Definition von Zuordnungen und Instanzmethoden geändert, nach Version> 4.

früher So Verbände definiert als (für die Version < 4)

const Model = sequelize.define('Model', { 
... 
}, { 
classMethods: { 
    associate: function (model) {...} 
}, 
instanceMethods: { 
    someMethod: function() { ...} 
} 
}); 

jetzt Sollte als

const Model = sequelize.define('Model', { 
... 
}); 

// Class Method 
Model.belongsTo(SomeOtherModel); 

prüfen definiert werden die upgrade guide und docs