我在Sequelize中很遺憾。 .hasMany定義僅與ID映射一起工作。 我們來看一下通常的項目/任務的簡單例子。假設項目具有VERSION屬性,並且應該與具有相同VERSION屬性的任務相關聯。續集與外鍵的關聯
我需要一種方法來強制關係基於兩個屬性:ID和VERSION。
我堅信我們需要一種基於多個外鍵(稱爲複合鍵)
在我的項目,使協會我有一堆的方法添加到模型來提供替代使用倍數getTasks鍵。
如果有人有一個建議,他歡迎。
我在Sequelize中很遺憾。 .hasMany定義僅與ID映射一起工作。 我們來看一下通常的項目/任務的簡單例子。假設項目具有VERSION屬性,並且應該與具有相同VERSION屬性的任務相關聯。續集與外鍵的關聯
我需要一種方法來強制關係基於兩個屬性:ID和VERSION。
我堅信我們需要一種基於多個外鍵(稱爲複合鍵)
在我的項目,使協會我有一堆的方法添加到模型來提供替代使用倍數getTasks鍵。
如果有人有一個建議,他歡迎。
這也是我們在項目中需要的東西。我們已經添加了我們需要的功能,並且每天在我們的項目中使用它,但功能沒有完全測試,所以我們還沒有提交拉請求。
但是,您可以找到的代碼在https://github.com/innofluence/sequelize/tree/newedge
specs/associations/composite-key.spec.js
顯示API:
Article = sequelize.define('Article', {
'title': Sequelize.STRING
}, {
instanceMethods: {
item_key: 'article'
}
});
Label = sequelize.define('Label', {
'text': Sequelize.STRING
})
Label.hasMany(Article, {foreignKey: "label_id", joinTableName: "item_label" });
Article.hasMany(Label, {foreignKey:{ "item_id": "id", "item": "item_key" }, joinTableName: "item_label" });
在這個例子中的一篇文章可以有多個標籤。連接表(item_label
)具有以下行:id, item, item_id, label_id
。 這裏最重要的是最後一行,它顯示了Label和Article之間的鏈接是一個組合鍵。外鍵是一個映射,其中鍵是連接表中的行,值是來自文章行的值。您可以在此處看到item_label中的項目映射到item_key,它是文章上的實例方法。這是因爲所有文章都有關鍵文章,因此不需要將其保存在數據庫中。
我希望這是有幫助的,如果你仍然有疑問,請隨時發表您的sequelize型號代碼,我會盡力幫助:-)
而且,它還將與工作或無連接表? – Zerzio
那麼,看代碼,目前它只能與hasOne一起使用,並有很多雙鏈接(帶連接表)。猜猜我們從未需要它爲hasMany單鏈接。我會把它寫在我的TODO項目清單上,但我不能保證很快就能做好準備,因爲我正在考試項目中。 –
我可以這樣做。應該修改哪些代碼? – Zerzio