[类似]:Sequelize文档中的示例抛出SQL错误

时间:2019-05-12 17:55:41

标签: node.js express sequelize.js

我有一个Node / Express / Sequelize项目。

使用文档中的以下示例,该示例将失败并在MySQL上引发SQL错误

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

上面的查询在Node / Express中生成以下SQL:

`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服务器版本的正确语法 在第1行的'('cat','hat')'附近使用

没有图像。

我要做的是将字符串数组传递到查询中,并返回所有图像,其中image_title包含该数组中的任何字符串。

该文档中的示例似乎正是我想要的,但是使用所记录的语法,即使是静态字符串,我也无法使用它。

这是否有错误,是我误解了它的工作原理,还是有另一种方法可以实现此目的?

1 个答案:

答案 0 :(得分:1)

目前可能的解决方法可能是使用RegEx

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

Image.findAll({
        where: {
            image_title: {
                [Op.regexp]: `*(${words.join('|')})*`
            }
        }
    })