【发布时间】:2020-12-07 11:02:40
【问题描述】:
通常每当我为 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
]
})
【问题讨论】:
标签: sql node.js sequelize.js