Node.js 使用sequelize for nodejs更新多对多联接表

Node.js 使用sequelize for nodejs更新多对多联接表,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我有一个产品表和一个类别表。单个产品可以有多个类别,单个类别可以有多个产品,因此我有一个ProductsCategories表来处理多对多联接 在下面的示例中,我试图将我的一个产品(ID为1)与3个不同的类别(ID为1、2和3)关联起来。我知道我下面的代码片段中出现了一些问题,因为我收到了一条丑陋的SQL错误消息,表明我正试图将一个对象插入ProductsCategories联接表。我不知道如何修复下面的代码片段,也不知道我是否在正确的轨道上。Sequelize文档对于这类事情来说非常稀少 mo

我有一个产品表和一个类别表。单个产品可以有多个类别,单个类别可以有多个产品,因此我有一个ProductsCategories表来处理多对多联接

在下面的示例中,我试图将我的一个产品(ID为1)与3个不同的类别(ID为1、2和3)关联起来。我知道我下面的代码片段中出现了一些问题,因为我收到了一条丑陋的SQL错误消息,表明我正试图将一个对象插入ProductsCategories联接表。我不知道如何修复下面的代码片段,也不知道我是否在正确的轨道上。Sequelize文档对于这类事情来说非常稀少

models.Product.find({ where: {id: 1} }).on('success', function(product) {
  models.Category.findAll({where: {id: [1,2,3]}}).on('success', function(category){
    product.setCategories([category]);
  });      
});

我真的很感谢你的帮助,谢谢。另外,我正在使用Postgres,不确定这是否重要。

models.Category.findAll
返回一个数组。通过执行
设置类别([category])您正在将该数组包装到一个数组中。尝试将其更改为
setCategories(类别)相反

我想你很接近了。我的一些代码也有类似的问题。尝试迭代找到的类别,然后添加它们。我想这可能会奏效

models.Category.findAll({where: {id: [1,2,3]}}).on('success', function(category){
            for(var i=0; i<category.length; i++){
                product.setCategories([category[i]]);
            }
      });  
models.Category.findAll({where:{id:[1,2,3]}).on('success',function(Category){

对于(var i=0;iOne reason我不喜欢数据库框架…这段代码似乎无法扩展。3条SQL语句用于说明1中可以做什么,并将每个表的每一列从DB服务器来回传递到app server,以满足ORM。非常感谢Jan!我甚至无法告诉你我在获取t时浪费了多少时间我真的很感谢你的帮助。嘿,瑞克,谢谢你的回复。我认为你所做的肯定会奏效,但上面的解决方案会更简洁一些。+1不管怎样,我认为这都不管用,因为每次调用setCategories都会替换整个类别列表,或者换句话说,只有最后一个类别会获胜并成为一个类别dded。这应该使用
product.addCategories()
,因为这样可以正确地追加