node.js - 原始查询中的 Node JS Sequelize WHERE LIKE 运算符抛出错误
问题描述
我正在构建一个 Node JS 应用程序。我正在使用 Sequelize 进行数据库操作。现在,我在将 LIKE 运算符与原始查询一起使用时遇到了问题。
我有如下查询。
let offset = (page > 1)? (page - 1) * recordPerPage: 0;
let where = { }
let sql = 'SELECT "Users"."id", "Users"."name", "Users"."email"';
sql = sql + ' FROM "Users"';
sql = sql + ' WHERE "Users"."id" != :myUserId';
where.myUserId = myUserId;
if (keyword) {
where.keyword = keyword;
sql = sql + ' AND ("Users"."email" LIKE "%:keyword%" OR "Users"."name" LIKE "%:keyword%")'
}
if (parseInt(roleType) > 0) {
// get the role is because role is the type
let role = await Role.findOne({
where: {
type: {
[Op.eq]: roleType
}
}
})
where.role = role.id;
sql = sql + ' AND "Users"."id" IN (SELECT "UserRoles"."user_id" FROM "UserRoles" WHERE "UserRoles"."role_id" =:role)';
}
sql = sql + ' ORDER BY "Users"."name" ASC, "Users"."id" ASC';
where.offset = offset;
where.limit = recordPerPage;
sql = sql + ' LIMIT :limit OFFSET :offset';
let users = await database.sequelize.query(sql, {
replacements: where,
type: QueryTypes.SELECT
})
当我传递与 LIKE 运算符一起使用的关键字时,我收到以下错误。
`column "%'TEST'%" does not exist`
我的代码有什么问题,我该如何解决?
解决方案
请看这里的最后一个例子: sql
中没有"
占位符,而且,keyword
应该包括%
里面,作为其内容的一部分。
这是文档中的示例:
const { QueryTypes } = require('sequelize');
await sequelize.query(
'SELECT * FROM users WHERE name LIKE :search_name',
{
replacements: { search_name: 'ben%' },
type: QueryTypes.SELECT
}
);
推荐阅读
- ethereum - 用于大量交易的 ETH 智能合约
- spring-kafka - Spring-Kafka RetryableTopic 导致 RecordTooLargeException
- python - 使用 .loc 和 .casefold 过滤数据框结果
- python - discord.py 对自己的消息添加反应
- python - 如何通过双端读取 ID 对 BLAST 结果中的元素进行分组
- javascript - 尽管我将在 NodeJS 中使用不同的路线,但这些路线一直将我带到“/”主要路线。我想转到“/api/auth/login”,但它需要“/”
- android - 深度链接后保存片段的状态
- django - django admin中数据库中表的确切名称是什么?
- sql - 如何连接多个表并将所有表的属性分布在一个表中?
- python - 当有相同的数字时,按降序和升序对字典进行排序