用外键定义关联

Zer*_*zio 4 sequelize.js

我真的在Sequelize中错过了这个..hasMany定义仅适用于ID的映射.让我们以通常的项目/任务为例.接着说,项目具有VERSION属性,并且应该与具有相同VERSION属性的任务相关联.

我需要一种方法来强制关系基于两个属性:ID和VERSION.

我坚信我们需要一种基于多个外键(称为复合键)进行关联的方法

在我的项目中,我不得不向模型添加一堆方法,以使用多个键替代getTasks.

如果有人有建议他欢迎.

Jan*_*ier 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" });
Run Code Online (Sandbox Code Playgroud)

在此示例中,文章可以具有多个标签.连接表(item_label)具有以下行:id, item, item_id, label_id.这里最重要的是最后一行,它显示Label和Article之间的链接是一个复合键.外键是作为映射给出的,其中键是连接表中的行,值是来自文章行的值.你可以在这里看到item_label中的项目映射到item_key,这是文章的实例方法.这是因为所有文章都有关键文章,所以不需要在db中保存.

我希望这有用,如果您仍然有疑问,请随时发布您的续集模型代码,我会尽力帮助:-)

  • 这是否已成为Sequelize的产品呢? (4认同)