当前位置: 首页 > 面试题库 >

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

暨宸
2023-03-14
问题内容

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


 类似资料:
  • 当我向应用程序提供参数时,它不会运行。它没有争论。 请帮帮我。

  • 问题内容: 我有一个名为 Product 的模型。我提供了全文搜索来搜索产品并使用AngularJS在客户端进行预输入。搜索查询是一个普通的类似查询,例如: 但是,随着表中记录的增加,使用上述方法的搜索时间增加了,因此我决定实现elasticsearch。我正在用两颗宝石。如何索引 产品模型 。我尝试在 rails控制台中 使用此命令,它给出了以下错误: 以下是我的实现: 产品型号 问题答案: 您

  • 我正在尝试从groovy中使用shell命令< code > notify-send-t 2000 " Title " " Message " ,以下一种方式< code > " notify-send-t 2000 \ " Title \ " \ " Message \ "。execute()就可以完美地工作了。但是当我试图用表达代替信息时,似乎什么都不管用。下面是代码片段: 能帮我理解一下吗?

  • 我有一个函数用3 where子句条件显示数据。但是这个输出是无效的。我有4个数据,只显示了1个。此函数如下所示: 这个数据只显示1,但在数据库中我有这么多的数据。有什么不对,如何解决?谢谢

  • 我想通过JDBC向Oracle DB发送一个准备好的语句SQL查询,如下所示: 只有在我提供3次时才起作用,但我不想这样做,我更希望调整准备好的语句的SQL,以便只使用一个但将其应用于所有条件。类似于 但这种尝试似乎并不奏效。有没有办法在SQL字符串中多次使用一个准备好的语句参数? 在@selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串: 然后,我得到错误“ORA-06550:第1

  • 问题内容: 知道如何将sequelize与include属性一起使用(当您只需要包含include表的特定字段时)? 目前,我有这个(但不能按预期工作): 问题答案: 这样的事情应该工作