2014-08-29 45 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 
    }); 
}); 

這是否適合您?