繁体   English   中英

无法使用 sequelize 和 mysql 根据包含的模型属性过滤数据

[英]Not able to filter data based on included model attribute with sequelize and mysql

我有一个这样的方法:

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”

请帮我解决这个问题。

注意区别: request_urlsas: "requestURLs"

您的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}%` }),
                ]
            },

我希望它有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM