多对多:sequelize不会创建方法

时间:2014-09-16 13:55:59

标签: mysql database node.js sequelize.js

考虑两个模型UserProject,其关系为“多对多”。

当我尝试这样做时: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
}

1 个答案:

答案 0 :(得分:3)

这是因为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。