通常每当我为SQL编写搜索查询时,我都会做类似的事情:
SELECT * FROM users u
WHERE (@username IS NULL OR u.username like '%' + @username + '%')
AND (@id IS NULL OR u.id = @id)
Run Code Online (Sandbox Code Playgroud)
基本上,这会模拟条件WHERE子句.如果提供了@searchParam,我们只想将@searchParam与列进行比较.
有没有办法使用Sequelize复制这个?
编辑:这是我最好的尝试失败:
models.user.findAll({
where: {
username: searchParams.username || models.sequelize.col('user.username'),
id: searchParams.id || models.sequelize.col('user.id')
}
})
Run Code Online (Sandbox Code Playgroud)
更新:我找到了一种方法,但感觉就像一个解决方法.我肯定必须有一个更优雅的方式.这有效,但很难看:
models.user.findAll({
where: [
'(? IS NULL OR "user"."username" LIKE ?) AND (? IS NULL OR "user"."id" = ?)',
searchParams.username,
`%${searchParams.username}%`,
searchParams.id,
searchParams.id
]
})
Run Code Online (Sandbox Code Playgroud)
Til*_*bek 12
您可以根据需要准备对象.简单易懂
var whereStatement = {};
if(searchParams.id)
whereStatement.id = searchParams.id;
if(searchParams.username)
whereStatement.username = {$like: '%' + searchParams.username + '%'};
models.user.findAll({
where: whereStatement
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5402 次 |
| 最近记录: |