gpt4 book ai didi

node.js - sequelize 查询的可选参数

转载 作者:行者123 更新时间:2023-12-03 22:21:17 24 4
gpt4 key购买 nike

早上好。

我是 NodeJS/sequelize 世界的新手,目前我在尝试在屏幕上显示仪表板时遇到问题。

此仪表板具有三个过滤器:两个日期(句点)、客户名称和员工姓名。用户可以选择无、一个、两个或所有过滤器,我的数据库需要相应地工作。

话虽如此,我的问题是 Sequelize,因为我不知道如何处理参数并非“始终”存在的问题。

我看过这个问题:

Sequelize optional where clause parameters?

但是这个答案不再有效了。我还尝试了另一种构建 where 子句的方法,但我也失败了(主要是由于 sequelize 运算符)。我尝试的最后一件事是进行包含所有参数的单个查询,但尝试找到一些值(或标志)使 sequelize 忽略参数,因为参数不存在*,但看起来 Sequelize 没有'有这样的东西。

* 我在这里读到一个问题,它的答案是 {} 可以解决问题,但我也试过了,但没有成功。

总结:我需要做一个可以随时间“改变”的查询,例如:

Foo.findAll({
where: {
id : 1,
}
});

Foo.findAll({
where: {
id {
[Op.in] : [1,2,3,4,5]
},
name: "palmeiira",
}
});

您是否知道无需使用大量 if/switch 语句即可完成此操作的方法?

我目前使用的是 Sequelize v. 5.5.1。

更新

我尝试按照@Anatoly 的建议进行操作,并创建了一个函数来构建参数。是这样的。 (我尝试了一个“较小”的版本只是为了测试)

async function test() {
const where = {};
where[Op.and] = [];
where[Op.eq].push({
id: {
[Op.in]: [1,2,3]
}
});

return where;
}

我将返回值设置为常量:

const query = await test()

并尝试了 console.log(query)结果是:{ [Symbol(and)]: [ { id: [Object] } ] },这让我相信问题出在解析 Op 部分我尝试使用 'Op.and''Op.in' 来避免这种情况,它解决了这个问题,但在 sequelize 上导致了另一个说 Invalid value

你知道我的错误在哪里吗?

P.S.:@Anatoly 非常好的想法,你在原始答案中给了我。非常感谢。

最佳答案

如果这三个条件应该一起工作,那么您可以将 Op.and 与一系列条件一起使用:

const where = {}

if (datesFilter || clientNameFilter || employeenameFilter) {
where[Op.and] = []
if (datesFilter) {
where[Op.and].push({
dateField: {
[Op.between]: [datesFilter.start, datesFilter.finish]
}
})
}
if (clientNameFilter) {
where[Op.and].push({
name: {
[Op.iLike]: `%${clientNameFilter.value}%`
}
})
}
if (employeenameFilter) {
where[Op.and].push({
employeeName: {
[Op.iLike]: `%${employeenameFilter.value}%`
}
})
}
}

const dashboardItems = await DashboardItem.findAll({ where }, {
// some options here
})

如果条件应该作为替代方案,则只需将 Op.and 替换为 Op.or

关于node.js - sequelize 查询的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61948302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com