首页 文章

用外键定义关联

提问于
浏览
4

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

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

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

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

如果有人有建议他欢迎 .

1 回答

  • 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,这是文章的实例方法 . 这是因为所有文章都有关键文章,所以不需要在db中保存 .

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

相关问题