близкие. Я разрабатываю электронную коммерцию, используя nodejs и sequenceize. Мне нужна помощь, мой вопрос: Как я могу запросить все продукты в категории, включая продукты дочерних категорий, используя sequenceize?
Я использую secvelizeV5, а также пакет npm «sequelize-hierarchy».
Пока у меня это:
async categoryAllProducts(req, res) {
try {
let category_id = req.params.id;
let categories = await models.Category.findAll({
where: sequelize.literal(`id=${category_id} OR parent_id = ${category_id}`)
});
await Promise.all(categories.map(async (category)=> {
let items = await category.getProducts({
offset: req.query.offset || 0,
limit: req.query.limit || 10,
where: req.query.filter ? sqs.find(req.query.filter) : {},
order: req.query.sort ? sqs.sort(req.query.sort) : [['id', 'asc']]
});
category.dataValues.products = items;
}));
return ReS(res, {data: categories}, 200);
} catch (error) {
return ReE(res, error, 400);
}
},
Но при этом я не могу использовать лимит и смещение, как хотел, и есть дублирование одних и тех же товаров в разных дочерних категориях. Кроме того, это не так эффективно. Есть рекомендации?
Надеюсь, я понимаю вашу проблему. Я думаю, что вы должны сделать это аналогично этому.
async categoryAllProducts(req, res) {
try {
let category_id = req.params.id;
const products = await models.Product.findAll({
include: [{
model: models.Category,
// you should use sequelize.Op
where: sequelize.literal(`id=${category_id} OR parent_id = ${category_id}`)
}],
offset: req.query.offset || 0,
limit: req.query.limit || 10,
order: req.query.sort ? sqs.sort(req.query.sort) : [['id', 'asc']]
})
return ReS(res, {data: products}, 200);
} catch (error) {
return ReE(res, error, 400);
}
},
демонстрационное изображение базы данных находится здесь: i.ibb.co/GthQXx9/demo.png