Невозможно отфильтровать данные на основе включенного атрибута модели с sequelize и mysql - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть такой метод:

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

, но он не возвращает данные, если попытаться выполнить фильтрацию с использованием включенных атрибутов модели. Вместо этого он возвращает:

Ошибка: Неизвестный столбец 'request_urls.url' в 'предложении where'

Пожалуйста, помогите мне разобраться в этом.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Ваше 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}%` }),
                ]
            },

Надеюсь, это поможет!

1 голос
/ 01 апреля 2020

Обратите внимание на разницу: request_urls и как: "requestURLs"

...