2014-08-29 50 views
0

通过参考下面我明白多对多如何映射与关系表如何获得关系/ assosiation在sequelizejs ORM

http://sequelizejs.com/docs/latest/associations#many-to-many

User = sequelize.define('User', { user_name : Sequelize.STRING}) 
Project = sequelize.define('Project', { project_name : Sequelize.STRING }) 
UserProjects = sequelize.define('UserProjects', { 
    status: DataTypes.STRING 
}) 

User.hasMany(Project, { through: UserProjects }) 
Project.hasMany(User, { through: UserProjects }) 

但是如何查询项目“一第用户

我试过像

User.find({where:{id:1},include,[UserProjects]}) 
User.find({where:{id:1},include,[Projects]}) 
User.find({where:{id:1},include,[UserProjects]}) 
User.find({where:{id:1},include,[Projects]}) 

但我不得到结果

Sequelize创建的表像下面

users(id,name) 
projects(id,project_name) 
userprojects(id,UserId,ProjectId) 

我试图https://github.com/sequelize/sequelize/wiki/API-Reference-Associations#hasmanytarget-options

User.find({where:{id:1}}).success(function(user){ 
    user.getProjects().success(function (projects) { 
     var p1 = projects[0] // this works fine but 2 queries required. I expect in single find. without getProjects 
     p1.userprojects.started // Is this project started yet? 
    }) 
}) 

如何获取一个用户的所有项目?

回答

0

您应该能够通过两种不同的方式获取用户的所有属性:使用包含并从用户实例获取项目。

使用包括您在上面提交的代码几乎是正确的。此方法只会使用JOIN操作对数据库进行一次查询。如果您希望所有用户使用相应的项目,请尝试:

User.findAll({include: [Project]}) 

您也可以直接从用户实例获取项目。这将需要两个查询到数据库。此代码看起来像

User.find(1).then(function(user) { 
    user.getProjects().then(function(projects) { 
    // do stuff with projects 
    }); 
}); 

这是否适合您?