gpt4 book ai didi

sequelize.js - 是否可以在单个事务中使用 sequelize 中的条件 promise 执行嵌套查询?

转载 作者:行者123 更新时间:2023-12-03 22:20:27 25 4
gpt4 key购买 nike

我正在尝试对具有多个关系的对象执行更新。其中一种关系是多对多的,我使用 product.setCategories([categories]) 来设置/更新它们:

var p = req.product;
var cIds = [];

return models.sequelize.transaction(function (t) {
var promises = [];
//check if the product is supposed to have categories
if (req.body.categories) {
req.body.categories.forEach(function (c) {
cIds.push(c.id);
});
promises.push(models.category.findAll({
where: { id: { $in: cIds } },
transaction: t
}).then(function (categories) {
p.setCategories(categories, { through: 'productsCategories' });
}));
} else if (p.categories.length > 0) {
//delete existing categories
promises.push(p.setCategories([], { transaction: t, through: 'productsCategories' }));
}

/add some more queries to "promises" and:
return models.sequelize.Promise.all(promises);

}).then(function (result) {
res.json(result);
}).catch(function (error) {
respondError(res, error);
});

我试图在单个事务(“t”)中执行此操作,但我看不到如何执行此操作,因为我需要一个仅在从数据库中检索类别后才执行的嵌套查询。

我可以在单笔交易中完成吗?这是更新 manyToMany 的最佳方式吗?

我在 Postgres 中使用 sequelize v3.23.3。

最佳答案

return models.sequelize.transaction(function (t) {
//check if the product is supposed to have categories
if (req.body.categories) {
req.body.categories.forEach(function (c) {
cIds.push(c.id);
});
return models.category.findAll({
where: { id: { $in: cIds } },
transaction: t
}).then(function (categories) {
p.setCategories(categories);
});
// OR
return p.setCategories(cIds)
} else if (p.categories.length > 0) {
//delete existing categories
return p.setCategories([], { transaction: t, through: 'productsCategories' });
}
});

如果您一次只执行一个操作 - 在这里您可以设置为数组或设置为空,您可以简单地从 if 语句中的每个分支返回,无需以 .all 结尾。如果您使用的是相当新版本的 sequelize,您也可以简单地将 cIds 直接传递给 setCategories

关于sequelize.js - 是否可以在单个事务中使用 sequelize 中的条件 promise 执行嵌套查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38251384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com