2015-03-25 138 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