在一次设置所有引用的同时插入多对多关系的正确方法是什么?我不想先 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/