Node.js Sequelize BelongToMany忽略联接表中的其他属性

Node.js Sequelize BelongToMany忽略联接表中的其他属性,node.js,postgresql,sequelize.js,has-and-belongs-to-many,Node.js,Postgresql,Sequelize.js,Has And Belongs To Many,我有两个模型:Article和description fragment通过连接表Descriptions在一个belongTomany关联中,这两个模型依次属于另一个模型Category,并且还有一个属性“sequence”,定义如下: 文章模型: “严格使用”; module.exports=(sequelize,数据类型)=>{ const Article=sequelize.define('Article'{ uid:{ 类型:DataTypes.INTEGER, allowNull:错,

我有两个模型:Articledescription fragment通过连接表Descriptions在一个belongTomany关联中,这两个模型依次属于另一个模型Category,并且还有一个属性“sequence”,定义如下:

文章模型:

“严格使用”;
module.exports=(sequelize,数据类型)=>{
const Article=sequelize.define('Article'{
uid:{
类型:DataTypes.INTEGER,
allowNull:错,
自动递增:真,
primaryKey:没错,
字段:“uid”
},
条款编号:{
类型:数据类型。整数(8),
allowNull:错,
字段:'物品编号',
独一无二:真的
},
}, {
是的,
});
Article.associate=功能(模型){
文章.属于(模型.描述片段{
通过:"说明",,
as:'articleWithDescriptionFragment',
其他键:{
名称:“descriptionFragmentId”,
字段:“描述\u片段\u id”
},
外键:{
名称:“articleId”,
字段:'article_id'
},
onDelete:'级联',
更新:“级联”
});
};
退货物品;
};
描述片段模型:

“严格使用”;
module.exports=(sequelize,数据类型)=>{
const DescriptionFragment=sequelize.define('DescriptionFragment'{
uid:{
类型:DataTypes.INTEGER,
allowNull:错,
自动递增:真,
primaryKey:没错,
字段:“uid”
}
}, {
字符集:“utf8”,
选择:{
校对:“utf8\u概述\u ci”
},
时间戳:对,
偏执狂:是的,
是的,
});
DescriptionFragment.associate=函数(模型){
DescriptionFragment.belongTomany(models.Article{
通过:"说明",,
as:“descriptionFragmentForArticle”,
外键:{
名称:“descriptionFragmentId”,
字段:“描述\u片段\u id”
},
其他键:{
名称:“articleId”,
字段:'article_id'
},
onDelete:'级联',
更新:“级联”
});
};
返回描述片段;
};
说明型号:

“严格使用”;
module.exports=(sequelize,数据类型)=>{
const Description=sequelize.define('Description'{
顺序:{
类型:DataTypes.INTEGER,
阿洛诺:是的
}
}, {
字符集:“utf8”,
选择:{
校对:“utf8\u概述\u ci”
},
时间戳:对,
偏执狂:是的,
是的,
});
Description.associate=功能(型号){
说明.属于(型号.类别、{
as:“类别说明”,
外键:{
名称:'categoryId',
字段:'category_id'
},
targetKey:'uid',
onDelete:'级联',
更新:“级联”
});
};
返回说明;
};
类别型号:

“严格使用”;
module.exports=(sequelize,数据类型)=>{
const Category=sequelize.define('Category'{
uid:{
类型:DataTypes.INTEGER,
allowNull:错,
自动递增:真,
primaryKey:没错,
字段:“uid”
}
}, {
字符集:“utf8”,
选择:{
校对:“utf8\u概述\u ci”
},
时间戳:对,
偏执狂:是的,
是的,
});
Category.associate=功能(模型){
类别。有许多(型号。说明{
外键:{
名称:'categoryId',
字段:'category_id'
},
sourceKey:'uid',
onDelete:'级联',
更新:“级联”
});
};
退货类别;
};
当我试图将描述片段文章关联时,我的问题就出现了。我正在使用以下代码:

let addedArticle = await Article.create(newArticle);

addedArticle.addArticleWithDescriptionFragment(descFrag, {
    through: {
      categoryId: catId,
      sequence: index
    }
  });
其中,descFrag是DescriptionFragment模型的一个实例,catId和index是整数

当代码运行时,sequelize会创建文章实例addedArticle,但是当尝试将其与描述片段关联时,它只会忽略through选项中的内容。生成的SQL是,例如:

Executing(默认):插入“devdb”。“Descriptions”(“created_at”,“updated_at”,“article_id”,“description_fragment_id”)值('2019-02-07 15:11:15.376+00:00','2019-02-07 15:11:15.376+00:00',95,5);
就我在中所能找到的而言,我使用的语法是正确的,关联是在Descriptions表中创建的,只是序列和类别id的
null

我使用的是sequelize v4.38.1,数据库是Postgres

我无法发现错误在哪里,到目前为止,我发现的所有类似问题都只是在sequelize v4中使用了v3的旧语法

如有任何见解,将不胜感激,谢谢


更新

目前,我正在使用以下解决方法:

wait addedArticle.addArticleWithDescriptionFragment(descFrag);
让newDesc=wait models.Description.find({
其中:{articleId:addedArticle.uid,descriptionFragmentId:descFrag.uid}
});
等待newDesc.update({categoryId:catId,sequence:index});
这将正确设置所需的列:

执行(默认):更新“techred\u dev”。“Descriptions”设置“category\u id”=2,“sequence”=0,“updated\u at”='2019-02-08 09:21:20.216+00:00',其中“article\u id”=104,“description\u fragment\u id”=6
当然,为了实现这一点,我必须更新我的描述模型,明确添加articleId和descriptionFragmentId列:

articleId:{
类型:DataTypes.INTEGER,
onDelete:'级联',
onUpdate:'级联',
参考资料:{
模型:“文章”,
键:“uid”
},
primaryKey:没错,
字段:'article_id'
},
descriptionFragmentId:{
类型:DataTypes.INTEGER,
onDelete:'级联',
责任