2015-04-16 68 views
7

我有項目和用戶。如何使用Sequelize belongsToMany關聯?

用戶可以有許多項目。

一個項目可以有多個用戶。

我試圖用belongsToMany關聯來建模。

在我的服務器我定義這樣的關聯:

user.belongsToMany(project, { 
    through: 'writer_of_project' 
    foreign-key: 'user' 
    as: \projects 
}); 

project.bbelongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

在我的客戶端,它看起來是這樣的:

user: { 
    id:  1, 
    ... 
    projects: [1,2,3] 
} 

project: { 
    id:  1, 
    ... 
    writers: [1,4,5] 
} 

在服務器上的關聯需要第三個表來存儲協會和Sequelize似乎沒有讓我包含它的相應模型。

如果我運行一個include:[user]project.find(1)得到

用戶未與項目相關的!

如果我嘗試將上述示例中的項目放入更新方法中。該用戶屬性會被忽略(我期望的project.setUsers(projectUpdate.users在後臺發生)。

什麼是對付這些協會的加載和更新的正確方法?

+1

我發現如果你使用[sequelize-cli](https://www.npmjs.com/package/sequelize-cli)設置你的模型,那麼關聯變得更容易閱讀,因爲它們包含在模型本身內。它也允許你使用遷移,這是一個真正的獎勵 – swifty

回答

13

當您提供一個別名(as)的關聯,您需要提供給包括還有:

project.belongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

project.find({ 
    where: { id: 1 }, 
    include: [ { model: User, as: 'writers' } ] 
}); 

或者你也可以保存協會:

Project.writersAssociation = project.belongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

project.find({ 
    where: { id: 1 }, 
    include: [ project.writersAssociation ] 
}); 
+0

這樣做會創建一個writer_of_project模型以及數據庫中相應的表格嗎?抱歉捎帶回來,但我擔心我的遷移沒有創建一個writer_of_project表中的數據庫。請指教.... –

相關問題