我有一个项目,我正在尝试使用sequelize。它可以很好地创建数据库和表,但它从未找到associate类方法,因此它从未调用associate方法。
这段代码可以很好地创建表(使用导入方法),但是Object.keys(db)遍历每个模型,但它从未找到关联方法。
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');
}
}
);类代码示例:
module.exports =函数(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;};
发布于 2017-07-07 12:09:39
Sequelize改变了关联和实例方法的定义方式,post版本>4。
所以之前的关联定义为(对于版本小于4)
const Model = sequelize.define('Model', {
...
}, {
classMethods: {
associate: function (model) {...}
},
instanceMethods: {
someMethod: function () { ...}
}
});现在应该定义为
const Model = sequelize.define('Model', {
...
});
// Class Method
Model.belongsTo(SomeOtherModel);检查upgrade guide和docs
https://stackoverflow.com/questions/44938556
复制相似问题