我有一个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'))`
答案 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'条件。