我真的在Sequelize中错过了这个 . .hasMany定义仅适用于ID的映射 . 让我们以通常的项目/任务为例 . 接着说,项目具有VERSION属性,并且应该与具有相同VERSION属性的任务相关联 .
我需要一种方法来强制关系基于两个属性:ID和VERSION .
我坚信我们需要一种基于多个外键(称为复合键)进行关联的方法
在我的项目中,我不得不向模型添加一堆方法,以使用多个键替代getTasks .
如果有人有建议他欢迎 .
这也是我们项目中需要的东西 . 我们已添加了我们所需的功能,并且每天都在我们的项目中使用它,但功能未经过全面测试,因此我们尚未提交拉取请求 .
但是你可以在https://github.com/innofluence/sequelize/tree/newedge找到代码
specs/associations/composite-key.spec.js 显示API:
specs/associations/composite-key.spec.js
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中保存 .
item_label
id, item, item_id, label_id
我希望这有用,如果您仍然有疑问,请随时发布您的续集模型代码,我会尽力帮助:-)
1 回答
这也是我们项目中需要的东西 . 我们已添加了我们所需的功能,并且每天都在我们的项目中使用它,但功能未经过全面测试,因此我们尚未提交拉取请求 .
但是你可以在https://github.com/innofluence/sequelize/tree/newedge找到代码
specs/associations/composite-key.spec.js
显示API:在此示例中,文章可以具有多个标签 . 连接表(
item_label
)具有以下行:id, item, item_id, label_id
. 这里最重要的是最后一行,它显示Label和Article之间的链接是一个复合键 . 外键是作为映射给出的,其中键是连接表中的行,值是来自文章行的值 . 你可以在这里看到item_label中的项目映射到item_key,这是文章的实例方法 . 这是因为所有文章都有关键文章,所以不需要在db中保存 .我希望这有用,如果您仍然有疑问,请随时发布您的续集模型代码,我会尽力帮助:-)