javascript - 使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器

标签 javascript sql node.js knex.js

我有一个项目数据库,我的用户需要能够搜索这些项目。他们可以应用不同的过滤器,例如 categorysearchTermitemType

我知道如何在 knex 查询中应用这些过滤器中的每一个,但我不确定如何有条件地组合它们。例如。在一种情况下,用户仅输入 searchTerm。所以我不想按类别或项目类型进行过滤,而只想按 searchTerm 进行过滤。但是,我只想有一个 knex 函数,它有条件地向查询添加额外的子句。

类似于:

const getFilteredItems = (searchCriteria) => knex('items')
   // IF (searchCriteria.searchTerm)
  .where('items.itemName', 'like', `%${searchCriteria.searchTerm}%`)
  // IF (searchCriteria.itemType)
  .where('items.itemType', '=', searchCriteria.itemType)
  // IF (searchCriteria.category)
  .where('items.category', '=', searchCriteria.category)

但我不确定如何有条件地将额外的 where 子句附加到 knex 查询。有没有一种优雅的方法可以在不编写原始 SQL 的情况下执行此操作?

最佳答案

您可以使用 knex 查询构建器有条件地构建您的查询:

const getFilteredItems = (searchCriteria) => knex('items')
  .where((qb) => {
    if (searchCriteria.searchTerm) {
      qb.where('items.itemName', 'like', `%${searchCriteria.searchTerm}%`);
    }

    if (searchCriteria.itemType) {
      qb.orWhere('items.itemType', '=', searchCriteria.itemType);
    }

    if (searchCriteria.category) {
      qb.orWhere('items.category', '=', searchCriteria.category);
    }
  });

您也可以使用 this 而不是像@abdulbarik 给出的示例中那样接受 querybuilder 参数,但我认为它不太明确。

关于javascript - 使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872822/

相关文章:

python - SQLAlchemy 中的计数关系

javascript - 读取输入并用 php 回显其他内容

mysql - 如何使用while循环在mysql中插入日期时间值

javascript - 如何更改动态加载模板的 img 路径

sql - 使用数据透视表加快计数 (*)

javascript - 如何在 JavaScript 中获取标签的 ID

javascript - 未定义文档和窗口的Puppeteer Electron

javascript - 如何读取json数组中的值

javascript - 用几个点替换 HTML 文本的末尾

javascript - 验证多个 URL 输入字段