【问题标题】:Conditional based where condition in sequelize Node JSsequelize Node JS中基于条件的条件
【发布时间】:2019-11-21 03:35:29
【问题描述】:

我正在尝试在 sequelize 中执行查询,其中必须根据请求参数添加 where 条件

router.get("/getsearchdata",(req, res) => {
    var searchquery =[
        {model:ProvidersCategories,attributes:["category_id"],
        include: [
            {model:Categories,attributes:["category_id","category_name"]},
        ]
        }
        ]  


    if(req.query.agency && req.query.agency!=''){
        searchquery.where = {
        $and: [
        {agencyName: {$like: '%' + req.query.agency + '%'}},
        ]
    }
    }


    Providers.findAll({
        include:searchquery
    }).then(providerData =>{
        if(!providerData) {
        res.status(404).send({reason:'no data found'});
        } else {
        res.status(200).send(providerData);
        }
    });
    });

我有三个表“providers”、“categories”和“provider_Categories”。我正在尝试加入这三个表并获取提供者。 在请求即req中,如果有输入req.query.agency != '',则必须添加一个if条件where agencyName like "% + req.query.agency + %",如果输入req.query.agency == '',则应该没有if条件。我已经尝试了上面的代码。但是即使有输入 req.query.agency,where 条件也不会连接到主查询。

有条件地写where的正确方法是什么

【问题讨论】:

    标签: node.js sequelize.js sequelize-typescript


    【解决方案1】:

    您的变量searchquery 是一个数组,您不能为其分配where 属性。您应该做的只是将 where 对象传递给查询选项对象:

        router.get("/getsearchdata", (req, res) => {
            var whereClause;
    
            if (req.query.agency && req.query.agency != '') {
                whereClause = {agencyName: {$like: '%' + req.query.agency + '%'}};
            }
    
    
            Providers.findAll({
                include: [
                    {
                        model: ProvidersCategories, attributes: ["category_id"],
                        include: [
                            {model: Categories, attributes: ["category_id", "category_name"]},
                        ]
                    }
                ],
                where: whereClause
            }).then(providerData => {
                if (!providerData) {
                    res.status(404).send({reason: 'no data found'});
                } else {
                    res.status(200).send(providerData);
                }
            });
        });
    

    【讨论】:

    • 解决方案运行良好,但我正在尝试再添加一个 if 条件 if (req.query.insurance && req.query.insurance != '') { whereClause = whereClause+{'ProviderCategories->类别.category_name' : req.query.category};并且它给出的错误是未处理的拒绝错误:对{where: 'raw query'} 的支持已被删除。
    • 由于whereClause 是一个对象而不是字符串,因此您需要使用它的属性而不仅仅是附加字符串。如果我正确理解你,你需要类似:whereClause['ProviderCategories->Category.category_name'] = req.query.category;
    • 但是如果你想对Category对象应用条件,你应该定义一个单独的变量,并将它传递给Category中的where属性:var categoryWhereClause = {category_name: req.query.category};... {model: Categories, attributes: ["category_id", "category_name"], where: categoryWhereClause},
    • 如果您的查询有空参数?我需要在有和没有“where”条件的情况下进行一次查询。
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 2018-10-27
    • 2021-10-06
    • 2013-05-10
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多