1
私はいくつかの関係を持つオブジェクトへの更新を実行しようとしています。これらの関係の一つは、多くの多くであると私は設定し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」)でそれをやろうとしましたが、私は、私は必要があるため、どのように見ることができませんデータベースからカテゴリを取得した後にのみ実行されるネストされたクエリ。
私は1回のトランザクションでそれを行うことはできますか?これはmanyToManyを更新する最良の方法ですか?
私はPostgresでsequelize v3.23.3を使用しています。
申し訳ありませんが、私は十分にはっきりしていないが、単純化のために約束のキューに追加されているいくつかの約束を削除したので、私は'all 'を放棄できないとは思わない。私は単純にids配列を追加することができますヒントありがとう、ありがとうございますが、私は条件付き約束とネストされたクエリを実行することができますまだ1つのトランザクションで続ける。私はできますか?ありがとうございます – belyid
私はあなたが条件付き約束を意味するかどうか確かめていませんか?あなたは精緻化できますか? –
オブジェクトを1回のトランザクションで更新したいとします。そのためには、コンテキストに応じて5〜10回の操作が必要です。私はクエリが必要かどうか(条件付き)を確認し、もしそうなら私はそれを約束[]に加えて、すべてを最後まで実行する。独立して実行できるのであれば問題ありませんが、他のクエリの中にネストする必要があるものはありません。 – belyid