2012-12-06 138 views
4

我在Sequelize中很遺憾。 .hasMany定義僅與ID映射一起工作。 我們來看一下通常的項目/任務的簡單例子。假設項目具有VERSION屬性,並且應該與具有相同VERSION屬性的任務相關聯。續集與外鍵的關聯

我需要一種方法來強制關係基於兩個屬性:ID和VERSION。

我堅信我們需要一種基於多個外鍵(稱爲複合鍵)

在我的項目,使協會我有一堆的方法添加到模型來提供替代使用倍數getTasks鍵。

如果有人有一個建議,他歡迎。

回答

5

這也是我們在項目中需要的東西。我們已經添加了我們需要的功能,並且每天在我們的項目中使用它,但功能沒有完全測試,所以我們還沒有提交拉請求。

但是,您可以找到的代碼在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型號代碼,我會盡力幫助:-)

+0

而且,它還將與工作或無連接表? – Zerzio

+0

那麼,看代碼,目前它只能與hasOne一起使用,並有很多雙鏈接(帶連接表)。猜猜我們從未需要它爲hasMany單鏈接。我會把它寫在我的TODO項目清單上,但我不能保證很快就能做好準備,因爲我正在考試項目中。 –

+0

我可以這樣做。應該修改哪些代碼? – Zerzio