如何使用Sequelize在条件参数中执行搜索

Den*_*s W 5 sequelize.js

通常每当我为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)