使用Nestjs+sequelize-typescript+PostgreSQL实现包含查询失败求解决
解决NestJS + Sequelize-Typescript中模糊查询失效的问题
嘿,我明白你遇到的问题了——直接把通配符%和关键词拼接后放到where条件里,Sequelize并不会把它识别为LIKE模糊查询的规则,而是会把整个%${searchedWord}%当作精确字符串去匹配,所以自然查不到你想要的结果啦。
下面是具体的解决步骤:
1. 导入Sequelize操作符
首先确保你已经导入了Sequelize提供的操作符工具,它能帮我们实现各种SQL查询条件:
import { Op } from 'sequelize';
2. 修改查询条件为模糊匹配
把原来的where条件替换成使用Op.like(区分大小写)或者Op.iLike(PostgreSQL专属,不区分大小写)的形式:
async findUsers(searchedWord: string): Promise<users[]> { return await this.USER_REPOSITORY.findAll({ attributes: ['id', 'name'], where: { content: { // 区分大小写的模糊匹配 [Op.like]: `%${searchedWord}%` // 如果需要不区分大小写,换成下面这行: // [Op.iLike]: `%${searchedWord}%` } }, order: [['id', 'ASC']] }); }
额外提示
使用Sequelize的操作符来构建查询还有个好处:它会自动处理参数化查询,避免直接字符串拼接带来的SQL注入风险,比手动拼接SQL要安全得多。
内容的提问来源于stack exchange,提问作者Intissar Intissar




