This commit is contained in:
@@ -40,11 +40,25 @@ const { qb, parameters } = applyToQueryBuilder(repo.createQueryBuilder('u'), fil
|
||||
|
||||
| 函数 | 说明 |
|
||||
|------|------|
|
||||
| `toFindOptionsWhere(filters, options?)` | → `FindOptionsWhere[]`。AND 项合并进同一对象,OR 项拆成数组元素(`where: [{a:1},{b:2}]` = a=1 OR b=2) |
|
||||
| `toFindOptionsWhere(filters, options?)` | → `FindOptionsWhere[]`。支持**深层 OR 嵌套**(递归 + 分配律展开):AND 项合并进同一对象,OR 项拆成数组元素,`X AND (A OR B)` 自动展开为 `[{X,A},{X,B}]` |
|
||||
| `applyToQueryBuilder(qb, filters, options?)` | → `{ qb, parameters }`。支持嵌套分组括号表达式、参数绑定、alias 前缀 |
|
||||
| `mapOperator(query, operatorMap?)` | 操作符码 → 工厂函数 |
|
||||
| `DEFAULT_OPERATOR_MAP` | 默认操作符映射表 |
|
||||
|
||||
### 深层 OR 嵌套(toFindOptionsWhere)
|
||||
|
||||
输入支持 `toTree` 输出的嵌套结构(`{ logic, children }`),自动展开:
|
||||
|
||||
| 逻辑 | 输出 |
|
||||
|------|------|
|
||||
| `A OR B` | `[{A}, {B}]` |
|
||||
| `X AND (A OR B)` | `[{X,A}, {X,B}]`(分配律) |
|
||||
| `(A OR B) AND (C OR D)` | `[{A,C},{A,D},{B,C},{B,D}]`(笛卡尔积) |
|
||||
| `A OR (B AND C)` | `[{A}, {B,C}]` |
|
||||
| 同字段 AND(`name='a' AND name LIKE 'b'`) | `And(Equal('a'), Like('b'))` |
|
||||
|
||||
> 注意:分配律展开在最坏情况下呈指数增长(每组 OR 分支相乘)。实际查询条件数量有限,可放心使用;极端复杂的布尔树建议走 `applyToQueryBuilder`(括号表达式,无展开成本)。
|
||||
|
||||
### 选项
|
||||
|
||||
**toFindOptionsWhere**:`{ skipFlags = ['disabled','hidden'], skipEmpty = false, operatorMap }`
|
||||
|
||||
Reference in New Issue
Block a user