使用nodejs的sequelize更新多对多连接表
我有一个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,不知道这是否重要。
models.Category.findAll
返回数组。通过做setCategories([category]);
你正在将数组包装在一个数组中。尝试将其更改为setCategories(category);
而不是
非常感谢你Jan!我甚至无法告诉你,我浪费了多少时间试图达到这个目标。我非常感谢你的帮助。 – wusauarus 2015-03-25 19:01:35
我觉得你已经接近了。我的一些代码有类似的问题。尝试迭代您找到的类别,然后添加它们。我认为这可能会诀窍。
models.Category.findAll({where: {id: [1,2,3]}}).on('success', function(category){
for(var i=0; i<category.length; i++){
product.setCategories([category[i]]);
}
});
嗨瑞克,谢谢你的回应。我认为你所做的一切肯定会奏效,但上面的解决方案更清洁一些。 +1方式 – wusauarus 2015-03-25 19:02:49
我不是数据库框架的粉丝的原因之一......这段代码看起来不像是可扩展的。 3 SQL语句,可以在1中完成,并将每个表的每列从DB服务器传递到应用服务器,以满足ORM。 – Brandon 2015-03-25 12:41:36