我正在尝试使用带有条件 WHERE 的 Sequelize 进行查询,如此处所述 (How to perform a search with conditional where parameters using Sequelize)。
我的代码相关部分是这样的
const Op = Sequelize.Op;
var search = {};
if (typeof req.query.search !== 'undefined'){
search.nome = {[Op.like]: '%' + req.query.search + '%'};
search.username = {[Op.like]: '%' + req.query.search + '%'};
}
model.User.findAll({
where:{
[Op.or]: [
search
]
})
它可以工作,但是生成的 SQL 添加了一个 AND 而不是 OR,如下所示:
SELECT 'id_', 'nome', 'username', 'id' FROM 'User' AS 'User' WHERE (('User'.'nome' LIKE '%test%' AND 'User'.'username' LIKE '%test%'))
我是不是做错了什么我没看到? 我已经尝试了几种组合,但都没有用。
最佳答案
构造的 search
过滤器有问题。 [Op.or]
应该是搜索的传播而不是数组。
尝试如下,
model.User.findAll({
where: {
[Op.or]: {
email: {
[Op.like]: 'abcd',
},
username: {
[Op.like]: 'cdf',
},
}
},
logging: console.log,
});
你会得到以下内容,
SELECT "id", "name", "username" FROM "users" AS "User" WHERE "User"."deleted_at" IS NULL AND ("User"."email" LIKE 'abcd' OR "User"."username" LIKE 'cdf');
关于node.js - 为什么我在 Sequelize 查询中 OR 运算符内的条件 WHERE 被转换为 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564036/