gpt4 book ai didi

sql - 如何使用 Sequelize 使用条件 where 参数执行搜索

转载 作者:行者123 更新时间:2023-12-04 16:42:32 25 4
gpt4 key购买 nike

通常,每当我为 SQL 编写搜索查询时,我都会执行类似的操作:

SELECT * FROM users u
WHERE (@username IS NULL OR u.username like '%' + @username + '%')
AND (@id IS NULL OR u.id = @id)

基本上这模拟了一个有条件的 WHERE 子句。如果提供了@searchParam,我们只想将@searchParam 与列进行比较。

有没有办法使用 Sequelize 复制这个?

编辑: 这是我失败的最佳尝试:
models.user.findAll({
where: {
username: searchParams.username || models.sequelize.col('user.username'),
id: searchParams.id || models.sequelize.col('user.id')
}
})

更新: 我找到了一种方法,但感觉像是一种解决方法。我确信必须有一种更优雅的方式。这有效,但很难看:
models.user.findAll({
where: [
'(? IS NULL OR "user"."username" LIKE ?) AND (? IS NULL OR "user"."id" = ?)',
searchParams.username,
`%${searchParams.username}%`,
searchParams.id,
searchParams.id
]
})

最佳答案

您可以只准备具有所需条件的对象。简单易懂

var whereStatement = {};
if(searchParams.id)
whereStatement.id = searchParams.id;
if(searchParams.username)
whereStatement.username = {$like: '%' + searchParams.username + '%'};
models.user.findAll({
where: whereStatement
});

关于sql - 如何使用 Sequelize 使用条件 where 参数执行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236837/

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