【问题标题】:Not able to filter data based on included model attribute with sequelize and mysql无法使用 sequelize 和 mysql 根据包含的模型属性过滤数据
【发布时间】:2020-04-02 13:09:28
【问题描述】:

我有这样的方法:

const getAllRequest = async (page, pageSize, order) => {
    try {
        const requests = await Request.findAndCountAll({
            where = {
                [Op.or]: [
                    sequelize.where(sequelize.col('requests.id'), { [Op.like]: `%${req.query.queryStr}%` }),
                    sequelize.where(sequelize.col('requests.user_id'), { [Op.like]: `%${req.query.queryStr}%` }),
                    sequelize.where(sequelize.col('requests.uuid'), { [Op.like]: `%${req.query.queryStr}%` }),
                    sequelize.where(sequelize.col('requests.status'), { [Op.like]: `%${req.query.queryStr}%` }),
                    sequelize.where(sequelize.col('requests.csv_url'), { [Op.like]: `%${req.query.queryStr}%` }),
                    sequelize.where(sequelize.col('request_urls.url'), { [Op.like]: `%${req.query.queryStr}%` }),
                ]
            },
            raw: true,
            attributes: ['id', 'uuid', 'userId', 'status', 'csvUrl', 'requestURLs.url', 'createdAt', 'updatedAt'],
            include: [{
                model: RequestUrl,
                as: "requestURLs",
                where: { type: 'brand' },
                attributes: []
            }],
            subQuery: false,
            offset: page * pageSize,
            limit: pageSize,
            order
        });
        return {
            status: 200,
            message: "List of requests.",
            requests
        }
    } catch (error) {
        return Promise.reject({
            status: 500,
            message: "Something went wrong.",
            error
        });
    }
}

但如果尝试使用包含的模型属性进行过滤,它不会返回数据。相反,它返回:

错误:“where 子句”中的未知列“request_urls.url”

请帮我解决这个问题。

【问题讨论】:

    标签: javascript mysql node.js database sequelize.js


    【解决方案1】:

    您的where 条件应如下 -

     where = {
                    [Op.or]: [
                        sequelize.where(sequelize.col('requests.id'), { [Op.like]: `%${req.query.queryStr}%` }),
                        sequelize.where(sequelize.col('requests.user_id'), { [Op.like]: `%${req.query.queryStr}%` }),
                        sequelize.where(sequelize.col('requests.uuid'), { [Op.like]: `%${req.query.queryStr}%` }),
                        sequelize.where(sequelize.col('requests.status'), { [Op.like]: `%${req.query.queryStr}%` }),
                        sequelize.where(sequelize.col('requests.csv_url'), { [Op.like]: `%${req.query.queryStr}%` }),
                        sequelize.where(sequelize.col('requestURLs.url'), { [Op.like]: `%${req.query.queryStr}%` }),
                    ]
                },
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      注意区别:request_urlsas: "requestURLs"

      【讨论】:

      • 它只是一个别名
      • 好的,删除带有该字段的条件并显示结果 SQL 查询
      • 你应该指出它在我使用别名并且仍然使用表名而不是别名引用数据的条件下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多