在sequelize中插入具有多个嵌套关联的对象的正确方法是什么?

时间:2016-06-13 18:28:01

标签: sequelize.js

我尝试使用事务创建具有多个嵌套关联的对象。我使用的是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]。此事务也没有回滚,因为我可以在数据库中看到新产品。

错误表明产品在尝试创建关联时不存在。这是奇怪的,因为在抛出错误后,产品是唯一创造的东西。

我做错了什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

ReferenceError是一个Javascript错误,而不是一个续集错误。

当您调用create()时,只需将product替换为Product,因为您使用大写字母实例化变量。

答案 1 :(得分:0)

我发现错误发生在其他地方。我试图创建的关联已经有一个“id”(暂时在客户端使用),它应该由postgres通过sequelize(使用DEFAULT)生成,并导致此错误。

我不知道为什么会抛出这个特殊错误:[ReferenceError: product is not defined]但是从两者中删除“id”属性后它才开始工作。

很抱歉让你进行狂追。