原始查询中的 Node JS Sequelize WHERE LIKE 运算符抛出错误
Node JS Sequelize WHERE LIKE operator in raw query is throwing error
我正在构建一个 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`
我的代码有什么问题,我该如何解决?
请看一下here中的最后一个例子:
sql 中没有 "
作为占位符,但是 keyword
应该包括 %
里面的 作为一部分其内容。
这是文档中的示例:
const { QueryTypes } = require('sequelize');
await sequelize.query(
'SELECT * FROM users WHERE name LIKE :search_name',
{
replacements: { search_name: 'ben%' },
type: QueryTypes.SELECT
}
);
我正在构建一个 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`
我的代码有什么问题,我该如何解决?
请看一下here中的最后一个例子:
sql 中没有 "
作为占位符,但是 keyword
应该包括 %
里面的 作为一部分其内容。
这是文档中的示例:
const { QueryTypes } = require('sequelize');
await sequelize.query(
'SELECT * FROM users WHERE name LIKE :search_name',
{
replacements: { search_name: 'ben%' },
type: QueryTypes.SELECT
}
);