多对多:sequelize不会创build方法
考虑两个模型User
和Project
的关系多对多。
当我尝试这个: db.User.getProjects()
我得到一个错误
TypeError:Object [object Object]没有方法'getProjects()'
我已经阅读了文档,这个方法应该是自动生成的
那么为什么我得到这个错误?
源代码:
project.js
module.exports = function(sequelize, DataTypes) { var Project = sequelize.define('Project', { name: DataTypes.STRING }, { classMethods: { associate: function(models) { Project.hasMany(models.User); } } }) return Project }
user.js的
module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', {}, { classMethods: { associate: function(models) { User.hasMany(models.Project), User.belongsTo(models.Boss, { foreignKey: 'user_id' }) } } }) return User }
这是因为db.User是模型,而不是实例。
getAccessor()方法在实例上被调用。 你应该这样做:
db.User .find( {where: {user_id: user_id}} ) .then(function(user) { return user.getProjects(); }) .then(function(projects) { //do something with your projects DAO }) .catch(function(err) {});
这是实例,或从您的第一个db.User.find
返回的具有方法的DAO。