【问题标题】:best way to have a knex column search be optional选择 knex 列搜索的最佳方式
【发布时间】:2022-04-12 17:24:07
【问题描述】:

到目前为止一切都很好(或者我应该说“非常棒”)使用/学习 knex。

我正在尝试模拟以下条件以使列名搜索成为可选:

AND tableName.columnNameOne = 2349
AND tableName.columnNameTwo = 'some value'
AND ( tableName.columnNameThree = 285 OR someFlag = true )

.ofWhereRaw 有一个“未记录的功能”(喜欢这个表达!),它似乎可以很好地满足我的要求:

.andWhere({
  'tableName.columnNameOne': columnNameOneValue,
  'tableName.columnNameTwo': columnNameTwoValue,
}).andWhere((val) => {
  val.where({ 'tableName.columnNameThree': columnNameThreeValue });
  val.orWhereRaw('(true = ?)', columnNameThreeFlag);
});

作为一个新手并且最近转换为 knex,这是处理这种情况的可选方法吗?我对使用文档中没有的选项感到紧张,因为在未来的版本中可能会删除未记录的选项。

非常感谢,感谢你的 knex(不再续集)。

【问题讨论】:

  • 你必须在 sql 查询中有那个标志吗?为什么不在 JS 中呢?
  • 我正在尝试将其与 feathersJs 接口 - 并传递一个标志以“禁用”其中一个搜索选项似乎是最简单的方法(但我可能错了......)
  • 好像可以在js中做flag。创建一个查询生成器,然后执行if (columnNameThreeFlag) { qb.andWhere(/* column three stuff */); }

标签: node.js node-modules knex.js


【解决方案1】:

您始终可以将knex.raw 用于手动查询部分。

.andWhere({
  'tableName.columnNameOne': columnNameOneValue,
  'tableName.columnNameTwo': columnNameTwoValue,
}).andWhere((val) => {
  val.where({ 'tableName.columnNameThree': columnNameThreeValue });
  val.orWhere(knex.raw('true = ?', [columnNameThreeFlag]));
  // -----------^
});

【讨论】:

    猜你喜欢
    • 2010-10-12
    • 2018-11-20
    • 1970-01-01
    • 2021-10-16
    • 2021-07-31
    • 2021-01-15
    • 2010-10-17
    • 2010-11-26
    • 2019-07-12
    相关资源
    最近更新 更多