webman-micro / base
Webman plugin webman-micro/base
0.1.3
2024-10-25 10:54 UTC
Requires
- nicmart/string-template: ^0.1.3
- taoser/webman-validate: ^1.7
- webman/think-orm: ^1.1
README
本包为开发中用到的基类,仅支持TP ORM
过滤条件设计
如上图所示,一个复杂的查询条件是可以分组逻辑or后与另外一个分组整体逻辑or,要实现这样逻辑有两种方案。
方案 | 说明 |
---|---|
1、多维数组递归组装 | 缺点数据很难验证和处理 |
2、一维数组 + 一个字符串规则 | ❤️优势处理简单,需要严格限制字符串规则,防止sql注入 |
当前我选择了方案2
方案参数说明
多条数据参数设计:
{ "filter": { "param": { "id#1" : ["-eq", 2], "id#2" : ["-eq", 3], "phone" : ["-eq", 18888888888], "name" : ["-lk", "xxx"] }, "rule": "(id {id#1} or phone {phone}) or (name {name} and id {id#2})" }, "order": [ { "field": "id", "order": "asc" } ], "page": [ 1, 200 ] }
1. filter参数设计
filter 必须使用 {"param": {}, "rule": ""} 参数结构
1.1 param 格式必须为 id : ["-eq", 2](字段: [过滤方法, 过滤参数])
过滤方法 | 说明 |
---|---|
-gt | > 大于 |
-egt | >= 大于等于 |
-lt | >= 小于 |
-lk | LIKE 包含 |
-not-lk | NOT LIKE 不包含 |
-eq | = 等于 |
-neq | <> 不等于 |
-find_in_set | find_in_set 在字符串里面 |
-bw | BETWEEN 在两个参数之间范围 |
-not-bw | NOT BETWEEN 不在两个参数之间范围 |
-in | IN 在列表之中 |
-not-in | NOT IN 不在列表之中 |
1.2 字段名为验证方法 queryFilter:id,name 后面跟着的rule是当前允许查询的字段
可能存在一个字段被表达式多次使用且参数和过滤方法不一样,可以采用如下方式:
param key 规则:字段名#数字
{ "param": { "id#1" : ["-eq", 2], "id#2" : ["-eq", 3] } }
2.1 rule 只能包含,param里面字段名允许的字段和 () {} 空格
用()分组,{字段}这里会被参数替换的部分,字段等于param参数的key值
(id {id#1} or phone {phone}) or (name {name} and id {id#2})