[Op.like]: пример из документации Sequelize выдает ошибку SQL - PullRequest
0 голосов
/ 12 мая 2019

У меня есть проект Node / Express / Sequelize.

Используя следующий пример из документации, происходит сбой и выдается ошибка SQL на MySQL

    Image.findAll({
        where: {
            image_title: {
                [Op.like]: { [Op.any]: ['cat', 'hat']}
            }
        }
    })

Приведенный выше запрос генерирует следующий SQL-запрос в Node / Express:

`Executing (default): SELECT `id`, `story_title`, `image_title`,
`original_filename`, `created_at` AS `createdAt`, `updated_at` 
AS `updatedAt` FROM `image` 
AS `image` 
WHERE `image`.`image_title` LIKE ANY ('cat', 'hat');`

Я ожидал получить список изображений, в котором image_title содержит либо 'cat', либо 'hat'

Вместо этого я получаю консольную ошибку в Chrome, которая гласит:

"У вас ошибка в синтаксисе SQL; обратитесь к руководству, соответствует вашей версии сервера MySQL для правильного синтаксиса использовать рядом с '(' cat ',' hat ')' в строке 1 "

И без изображений.

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

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

Есть ли в этом ошибка, я неправильно понимаю, как это работает, или есть другой способ сделать это?

1 Ответ

1 голос
/ 14 мая 2019

Возможным решением проблемы может быть использование RegEx

let words = ['cat','hat'];

Image.findAll({
        where: {
            image_title: {
                [Op.regexp]: `*(${words.join('|')})*`
            }
        }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...