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

Mian Muhammad :

I have a method like this:

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
        });
    }
}

but it doesn't return data if try to filter using included model attributes. Instead it returns:

Error: Unknown column 'request_urls.url' in 'where clause'

Please help me to figure this out.

Soham Lawar :

Your where condition should be as follows -

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

I hope it helps!

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=394921&siteId=1