否定查询构建器中现有的knex where子句

时间:2018-11-16 15:59:32

标签: knex.js

我有一个knex QueryBuilder对象qb,其中包含许多where子句。我希望能够将整个where子句包装在一个not语句中,从而有效地否定整个where子句。

示例:

const qb = knex.queryBuilder();
qb.whereIn('name', ['alice', 'bob']);

// ... in some other part of the file ...

// Example of what I would like to do, effectively negate the above query if
// some condition is met.
if (negateSearch) {
    const outerQb = knex.queryBuilder();
    outerQb.whereNot(qb);
    // execute outerQb
} else {
    // execute qb
}

这将导致查询看起来像

where not (name in ('alice', 'bob'))`

2 个答案:

答案 0 :(得分:0)

knex当前不支持该功能。

将来,使用此功能,可以通过将where子句与查询构建器https://github.com/tgriesser/knex/issues/1893的其余部分分开存储来实现

因此,现在您需要更改使用knex的代码,直到您知道是否应该否定它,才真正构建where子句。

答案 1 :(得分:0)

如果我了解您想要什么,则可以使用Modify:

knex('table')
.whereIn('name', ['alice', 'bob']);
.modify((query) => {
  if (negateSearch) {
    query.whereNot('yourcondition')
  }
})
.orderBy('anyColumn', 'desc')

仅当negateSearch为true时,它将添加'whereNot'条件。