人。我正在使用nodejs和sequelize开发电子商务。我需要一些帮助,我的问题是: 如何使用sequelize查询某个类别下的所有产品,包括子类别的产品?
我正在使用sequelizeV5以及'sequelize-hierarchy'npm软件包
到目前为止,我有这个:
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);
}
},
但是,在这一点上,我无法根据需要使用限制和偏移量,并且在不同的子类别中存在相同产品的重复项。而且,它不是那么有效。有什么建议吗?
答案 0 :(得分:0)
希望我能理解你的问题。我认为您应该这样做。
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);
}
},