我尝试使用事务创建具有多个嵌套关联的对象。我使用的是Postgres,对象如下:
var Product = sequelize.define('product', {/* attributes */});
var ProductDetail = sequelize.define('productDetail', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
/* attributes */
});
var ProductVariation = sequelize.define('productVariation', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
/* attributes */
});
Product.hasMany(ProductDetail);
Product.hasMany(ProductVariation);
我尝试创建一个事务,以便同时插入新产品和通讯协会:
return models.sequelize.transaction(function (t) {
return models.product.create({
name: req.body.name,
enabled: req.body.enabled,
productDetails: req.body.productDetails,
productVariations: req.body.productVariations
}, {
include: [models.productDetail, models.productVariation],
transaction: t
}
)
}).then(function (result) {
//Success
}).catch(function (error) {
//Shouldn't rollback?
});
我收到错误[ReferenceError: product is not defined]
。此事务也没有回滚,因为我可以在数据库中看到新产品。
错误表明产品在尝试创建关联时不存在。这是奇怪的,因为在抛出错误后,产品是唯一创造的东西。
我做错了什么?
谢谢。
答案 0 :(得分:0)
ReferenceError是一个Javascript错误,而不是一个续集错误。
当您调用create()时,只需将product
替换为Product
,因为您使用大写字母实例化变量。
答案 1 :(得分:0)
我发现错误发生在其他地方。我试图创建的关联已经有一个“id”(暂时在客户端使用),它应该由postgres通过sequelize(使用DEFAULT)生成,并导致此错误。
我不知道为什么会抛出这个特殊错误:[ReferenceError: product is not defined]
但是从两者中删除“id”属性后它才开始工作。
很抱歉让你进行狂追。