如何使用Sequelize查询包含子类别产品的类别下的所有产品

时间:2019-05-28 19:40:06

标签: node.js sequelize.js

人。我正在使用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);
        }
    },

但是,在这一点上,我无法根据需要使用限制和偏移量,并且在不同的子类别中存在相同产品的重复项。而且,它不是那么有效。有什么建议吗?

1 个答案:

答案 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);
    }
},