Запрос на книжную полку / Knex для MySQL, возвращающий неверные результаты - как мне устранить неполадки? - PullRequest
0 голосов
/ 30 января 2020

Я выполняю условный запрос к различным столбцам таблицы, который называется «сообщение». По сути, я хочу получить все сообщения, которые были отправлены или получены пользователем, и при желании выполнить поиск в столбце JSON для поиска.

JS выглядит следующим образом:

const messages = await new Message()
                .query((qb) => {
                    qb.where('deleted', null);
                    if (sent)
                        qb.andWhere('from_user_id', req.user.attributes.id);
                    else
                        qb.andWhere('to_user_id', req.user.attributes.id);
                    if (searchString)
                        qb.andWhereRaw(`message_details->'$.title' LIKE "%${searchString}%" OR message_details->'$.body' LIKE "%${searchString}%"`)
                })
                .fetchPage();

Без строки поиска это работает нормально. Однако со строкой поиска я получаю обратно каждое сообщение, содержащее эту строку, независимо от того, какому пользователю оно было отправлено или.

Необработанный SQL, который создается по запросу без строки поиска выглядит так:

sql: 'select `message`.* from `message` where `deleted` is null and `from_user_id` = 1'

С поисковой строкой это выглядит так:

sql: 'select `message`.* from `message` where `deleted` is null and `from_user_id` = 1 and message_details->\'$.title\' LIKE "%mysearchstring%" OR message_details->\'$.body\' LIKE "%mysearchstring%" 

Что здесь происходит? Что еще я должен проверять?

...