Sequelize插入多对多

时间:2015-06-04 18:44:36

标签: sequelize.js

在一次性设置参考时,以多对多关系插入的正确方法是什么?我不想先创建对象,然后在另一步中设置引用。

Product.belongsToMany(models.Aisle, { through: 'AisleProduct' }); 
Aisle.belongsToMany(models.Product, { through: 'AisleProduct'});

var product = models.Product
            .build({
                AisleId:[1,2]  // This does NOT work!
            });
product.save();

这不起作用

var product = models.Product.build({});
product.setAisles(AisleId:[1,2]);
product.save();

setAisles尝试保存尚未拥有id的对象并抛出异常

1 个答案:

答案 0 :(得分:0)

您需要先创建Aisles。 Sequelize不支持在亲属的构建阶段创建关联对象。

您的代码应如下所示:

models.Aisle.create({}).then(function(aisle1) {
  models.Aisle.create({}).then(function(aisle2) {

    models.Product.create({}).then(function(product) {
      product.setAisles([aisle1, aisle2]);
    });

  });
});

您可以创建自己的beforeCreate hook,可以在保存产品之前通过选项创建过道。

BelongsToMany关系将另一个表添加到您的数据库productAisles,需要填充该表以保存关系,因此,如果您首先构建Aisles然后将它们添加到其中,那么实际上您将不会保存任何查询你的产品。