node.js - 如何使用 Sequelize 查询包含子类别产品的类别下的所有产品
问题描述
伙计们。我正在使用 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);
}
},
但在这一点上,我不能随意使用limit和offset,并且在不同的子类别中存在相同产品的重复。而且,效率也不高。有什么建议吗?
解决方案
我希望我能理解你的问题。我认为你应该这样做。
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);
}
},
推荐阅读
- python - python3中的exec和defaultdict赋值
- testing - 基于角色和权限的网站进行测试
- javascript - 在 Protractor 测试中需要使用页面对象模型断言表单字段
- reactjs - 对象对象仅在生产中编译反应
- java - 如何在多模块架构(Java)中使用 Safeargs?
- bash - ImageMagick - 合并具有部分文件名匹配的文件
- sql - 在 Oracle 中从星期一开始按星期几对员工列表进行排序
- scala - 从构造函数中具有可变变量的类继承
- ios - 如何根据内在内容设置集合视图单元格的自动宽度大小?
- jquery - jQuery 如果下拉 UL 未选中