2015-03-25 107 views
1

我有一个Products表和一个Categories表。单个产品可以有很多类别,并且一个类别可以有很多产品,因此我有一个ProductsCategories表来处理多对多连接。使用nodejs的sequelize更新多对多连接表

在下面的示例中,我试图将我的一个产品(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,不知道这是否重要。

+0

我不是数据库框架的粉丝的原因之一......这段代码看起来不像是可扩展的。 3 SQL语句,可以在1中完成,并将每个表的每列从DB服务器传递到应用服务器,以满足ORM。 – Brandon 2015-03-25 12:41:36

回答

6

models.Category.findAll返回数组。通过做setCategories([category]);你正在将数组包装在一个数组中。尝试将其更改为setCategories(category);而不是

+0

非常感谢你Jan!我甚至无法告诉你,我浪费了多少时间试图达到这个目标。我非常感谢你的帮助。 – wusauarus 2015-03-25 19:01:35

1

我觉得你已经接近了。我的一些代码有类似的问题。尝试迭代您找到的类别,然后添加它们。我认为这可能会诀窍。

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

嗨瑞克,谢谢你的回应。我认为你所做的一切肯定会奏效,但上面的解决方案更清洁一些。 +1方式 – wusauarus 2015-03-25 19:02:49