knex.js:orWhere 后跟多个 where 的组合

Jav*_*nov 1 mysql node.js node-mysql knex.js

我正在使用 knex.js 编写查询,但我被 orWhere 困住了。

我需要这样的查询:

select 
    count(*) 
from 
    `Project` 
where 
    `Project`.`createdAt` >= '2019-11-12' 
and 
    `Project`.`createdAt` <= '2020-11-19' 
and 
    ((`Project`.`productType` = 1) 
or 
    (`Project`.`productType` = 2))
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这就是我得到的:

select 
    count(*) 
from 
    `Project` 
where 
    `Project`.`createdAt` >= '2019-11-12' 
and 
    `Project`.`createdAt` <= '2020-11-19' 
or 
    (`Project`.`productType` = 1) 
or 
    (`Project`.`productType` = 2)
Run Code Online (Sandbox Code Playgroud)

or请注意,我想要用两个 'and来代替第一个or

这是代码:

 builder.count('*')
.from('Project')
.where('Project.createdAt', '>=', '2019-11-12')
.where('Project.createdAt', '<=', '2019-11-19')
.orWhere({'Project.productType': 1})
.orWhere({'Project.productType': 2})
Run Code Online (Sandbox Code Playgroud)

将不胜感激任何帮助

Tha*_*gLe 11

我明白了,你可以尝试一下:

//
 builder.count('*')
.from('Project')
.where('Project.createdAt', '>=', '2019-11-12')
.where('Project.createdAt', '<=', '2019-11-19')
.where(function () {
    this.orWhere({'Project.productType': 1}).orWhere({'Project.productType': 2})
});

// or use arrow function
 builder.count('*')
.from('Project')
.where('Project.createdAt', '>=', '2019-11-12')
.where('Project.createdAt', '<=', '2019-11-19')
.where((bd) => {
    bd.orWhere({'Project.productType': 1}).orWhere({'Project.productType': 2})
});
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。