sequelize.js - Sequelize 插入多对多

标签 sequelize.js

在一次设置所有引用的同时插入多对多关系的正确方法是什么?我不想先 xreate 对象,然后在另一个步骤中设置引用。

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 的对象并抛出异常

最佳答案

您需要先创建过道。 Sequelize 不支持在 relative 的构建阶段创建关联对象。

您的代码应如下所示:

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,需要填充该表以保存关系,因此实际上如果您首先构建过道,然后将它们添加到您的产品中。

关于sequelize.js - Sequelize 插入多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30651738/

相关文章:

sql - 别名后的外连接中不存在该列

sql - 与 Sequelize 的事务不起作用

sequelize.js - sequelize 多对多选择返回连接表属性

node.js - 添加交易以 Sequelize

sequelize.js - Sequelize - 返回标准化数据

sql - 如何编写可能来自不同表的 "belongs to"关联?

node.js - Apollo GraphQL "Cannot return null for non-nullable field Mutation.createUser"

javascript - 如何使用sequelize和mysql创建一对一关系?

mysql - Sequelize 获取查询的所有数据而不执行我的条件 'where'

sequelize.js - 按第一个模型在 sequelize 中订购