【问题标题】:Updating a many to many join table using sequelize for nodejs使用 sequelize for nodejs 更新多对多连接表
【发布时间】:2015-05-28 15:16:29
【问题描述】:

我有一个 Products 表和一个 Categories 表。一个产品可以有很多类别,一个类别可以有很多产品,因此我有一个 ProductsCategories 表来处理多对多连接。

在下面的示例中,我尝试将我的一种产品(ID 为 1)与 3 个不同的类别(ID 分别为 1、2 和 3)相关联。我知道下面的代码 sn-p 有问题,因为我收到一条丑陋的 SQL 错误消息,表明我正在尝试将一个对象插入 ProductsCategories 连接表中。我不知道如何修复下面的 sn-p,或者我是否在正确的轨道上。 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,不确定这是否重要。

【问题讨论】:

  • 我不喜欢数据库框架的一个原因......这段代码似乎无法扩展。 3条SQL语句用于1中可以完成的事情,并将每个表的每一列从DB服务器来回传递到应用服务器以满足ORM。

标签: node.js postgresql sequelize.js


【解决方案1】:

models.Category.findAll 返回一个数组。通过执行setCategories([category]);,您将该数组包装在一个数组中。尝试将其更改为 setCategories(category);

【讨论】:

  • 非常感谢 Jan!我什至无法告诉你我浪费了多少时间试图弄清楚这一点。非常感谢您的帮助。
【解决方案2】:

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

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 任一方式
  • 我认为这行不通,因为每次调用 setCategories 都会替换整个类别列表,或者换句话说,只有最后一个类别会获胜并被添加。
  • 这应该使用product.addCategories(),因为它会正确附加
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 2020-05-03
  • 2022-01-18
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2014-12-02
相关资源
最近更新 更多