これは、私たちのプロジェクトでも必要だったものです。必要な機能を追加し、プロジェクトで毎日使用していますが、機能は完全にはテストされていないため、まだプル リクエストを送信していません。
ただし、 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 にマップされていることがわかります。これは、article のインスタンス メソッドです。これは、すべての記事にキー記事があるため、それをデータベースに保存する必要がないためです。
これがお役に立てば幸いです。まだ疑問がある場合は、お気軽に続編モデルのコードを投稿してください。私がお手伝いします :-)