我有这个问题与续集:我试图有一个3参数的研究,如果其中一个参数是空的,它不应该考虑该参数。
const users = await User.findAll({
where: {
category: { [Op.like]: `%${req.query.category}%` },
location: { [Op.like]: `%${req.query.location}%` },
[Op.or]: [
{ job: { [Op.like]: `%${req.query.job}%` } },
{ bio: { [Op.like]: `%${req.query.job}%` } },
{ skills: { [Op.like]: `%${req.query.job}%` } },
],
},
attributes: { exclude: ['password', 'createdAt', 'updatedAt'] },
})
我发现[Op.like]
在任何地方都不起作用。它只在一个参数为空时才起作用(阻止该参数过滤用户,这是我喜欢的东西)。
当我对示例payload {category:'Information Technology', job:'frontend web dev', location:'Sydn'}
进行研究时,这被记录在进程日志中:
Executing (default): SELECT `id`, `email`, `firstName`, `lastName`, `image`, `location`, `phone`,
`website`, `availability`, `category`, `job`, `skills`, `bio` FROM `Users` AS `User`
WHERE (`User`.`job` LIKE '%frontend web dev%' OR `User`.`bio` LIKE '%frontend web dev%' OR
`User`.`skills` LIKE '%frontend web dev%') AND `User`.`category` LIKE '%Information Technology%'
AND `User`.`location` LIKE '%Sydn%';
但是没有找到用户。(是的,在数据库中,我有类似参数的用户)
3条答案
按热度按时间4c8rllxm1#
我认为它应该看起来更像这样:
我在这里所做的是添加单引号标记
'
。关于documentation4xrmg8kj2#
在我看来,你的代码和记录的SQL是一样的。我没有看到任何错误。也许你应该尝试复制SQL并将其粘贴到MySQL中(如果你使用MySQL),然后尝试运行它。
qjp7pelc3#
我建议您先拆分请求查询。然后你可以选择使用Op.或Op.,这样,你就可以使用它们中的任何一个。
我不确定两个都用。
看看我是如何使用
%
的。