2016-09-08 60 views
2

我有多個模型相互關聯。如何在沒有加載關聯對象的情況下通過關聯查詢sequelize?

e.g:

var User = sequelize.define("user") 
var Project = sequelize.define("project") 

Project.hasMany(User) 

現在我要查詢包含特定用戶的所有項目。

例如爲:

Project.findAll({ 
    include: [ 
     { 
      model: User, 
      where: { id } 
     } 
    ] 
}) 

這個工作,但也加載用戶,並將其附加到項目中。 如何判斷續集,不應將用戶添加到找到的項目中?

+0

這是一個多對多的關係嗎? – grimurd

+0

是的,這是一個多對多的關係 –

回答

0

多對多關係是使用belongsToMany()方法在雙方的重複中定義的。對於您的特定用例,您將不得不爲關係使用直通模型,並直接查詢直通模型。

var User = sequelize.define("user") 
var Project = sequelize.define("project") 
var ProjectUser = sequelize.define("projectUser") 

Project.belongsToMany(User, { 
    through: ProjectUser 
}) 

User.belongsToMany(Project, { 
    through ProjectUser 
}); 

ProjectUser.findAll({ 
    where: { 
     UserId: 'someId' 
    }, 
    // We only want the project, not the user. 
    // You might need to do ProjectUser.belongsTo() for both 
    // models for this to work. 
    include: [Project] 
}) 
.then(function(results) { 
    // Here we are getting an array of ProjectUsers, to return all the projects 
    // we map it to a new array of only projects. 
    return results.map(function(userProject) { 
     return userProject.Project; 
    }); 
}) 
+0

這不是我所需要的。 事件雖然它解決了我的例子中的問題,這只是爲了簡化我的問題。其實我有findAll三個嵌套包括模型,我不能使用這種方法。 –

+0

然後我認爲唯一的方法就是使用它。我能想到的唯一的事情是指定要獲取哪些字段,並只獲取用於查找的特定ID字段,模型仍將包含在內,但只包含一個字段。這應該會加快查詢速度。 – grimurd

+0

儘管最好的方法是使用sequelize.query()並手動編寫查詢。 – grimurd

相關問題