mnemesong / spex
该包提供对象和接口,用于表达规范。
Requires
- php: >=7.4
- mnemesong/structure: 0.4.*
- webmozart/assert: 1.11.*
Requires (Dev)
README
- 文档用两种语言编写:俄语和英语。
- 文档是用两种语言编写的:俄语和英语。
一般描述 / 一般描述
ENG
该包提供对象和接口,用于表达规范(描述从存储中获取记录的条件)。为了快速构建,请使用 Sp::ex() 构建器。
RUS
该包提供对象和接口,用于表达规范(描述从存储中获取记录的条件)。为了快速构建,请使用 Sp::ex() 构建器。
需求 / 需求
- PHP >= 7.4
- Composer >=2.0
安装 / 安装
composer require "mnemesong/spex"
规范 / 规范
ENG
规范允许您指定搜索或选择记录的条件,包括逻辑上复杂的条件。
指定器 Sp::ex
Sp 类的 ex() 方法允许您快速表达任何类型的规范。其通用语法如下
Sp::ex(<规范字符>, <列名>, <其他比较参数(列名、值或 null)>);
其他类型参数取决于规范类型。有几种规范类型
数组比较规范
它们具有以下一般形式:Sp::ex(string <规范标记>, string <列名>, array <比较数组>)
数组比较规范类型
"in"- 检查列中的值是否包含在比较数组中"!in"- 检查列中的值是否不包含在比较数组中
示例
Sp::ex("in", "age", [11, 22, 33, 44, 55])
表列比较规范
具有以下一般形式:Sp::ex(string <规范标记>, string <列名>, string <列名>)
表列比较规范类型
"cs="- 检查同一行表中两列值的相等性,作为字符串(逐字符)"cs!="- 以字符串形式逐字符检查同一行表中两列值的差异"cs>"、"cs!>"、"cs>="、"cs<"、"cs!<"、"cs<="- 以字符串形式逐字符比较同一行表中两列的值"clike"- 检查字符串第二列的值是否作为子串包含在第一列中"c!like"- 检查字符串第二列的值是否不包含在第一列中作为子串"cn="- 检查同一行表中两列值的数值相等性"cn!="- 检查同一行表中两列值的数值差异"cn>"、"cn!>"、"cn>="、"cn<"、"cn!<"、"cn<="- 比较同一行表中两列的数值
示例
Sp::ex("cs<=", "contractsCount", "requestsCount")
数值比较规范
它们具有以下通用形式:Sp::ex(string <spec character>, string <column name>, float|int|stringNumber <numerical value>)
具有数值值的比较规范类型
"n="- 检查列值与指定数值的相等性(非NULL安全)"n!="- 检查列值与指定数值的不相等性(非NULL安全)"n>"、"n!>"、"n>="、"n<"、"n!<"、"n<="- 将列值与指定的数值进行比较
示例
Sp::ex("n=", "winsCount", "losesCount")
字符串比较规范
它们具有以下通用形式:Sp::ex(string <spec character>, string <column name>, string <string value>)
具有字符串值的比较规范类型
"s="- 检查列值与指定字符串值的相等性(非NULL安全)"s!="- 检查列值与指定字符串值的不相等性(非NULL安全)"s>"、"s!>"、"s>="、"s<"、"s!<"、"s<="- 将列值的字符逐字符与指定的字符串值进行比较"like"- 检查字符串值是否是列中值的子串
示例
Sp::ex("s=", "name", "Bob")
一元比较规范
它们具有以下通用形式:Sp::ex(string <spec mark>, string <column name>)
一元比较规范类型
"null"- 检查列值是否为NULL"!null"- 检查列值是否为null"empty"- 检查在NULL列或空字符串中的相等性"!empty"- 检查值是否不是NULL列或空字符串
示例
Sp::ex("empty", "comment")
复杂复合规范
它们具有一般形式:Sp::ex(string <规范标记>, SpecificationInterface[] <子规范数组>)
复杂复合规范类型
"and"- 规范对应于所有条件都在子规范中满足的条目"and"- 规范对应于满足子规范中指定条件之一的记录
示例
Sp::ex("and", [Sp::ex("!empty", "birthday"), Sp::ex("!empty", "age")])
一元复合规范
它们具有一般形式:Sp::ex(string <规范标记>, SpecificationInterface <子规范>)
一元复合规范类型
"!"是子规范的非空安全否定。
示例
Sp::ex("!", Sp::ex("c=", "managerUuid", "customerUuid"))
RUS
规范允许指定用于搜索或选择记录的条件,包括逻辑复杂的条件。
Sp::ex 规范表达式
Sp 类的 ex() 方法允许快速表达任何类型的规范。其通用语法如下
Sp::ex(<规范标记>, <列名>, <比较参数(列名,值或 null)>);
比较参数的类型取决于规范类型。存在几种规范类型
与数组比较的规范
具有一般形式:Sp::ex(string <规范标记>, string <列名>, array <比较数组>)
与数组比较的规范类型
"in"- 检查列值是否在比较数组中"!in"- 检查列值是否不在比较数组中
示例
Sp::ex("in", "age", [11, 22, 33, 44, 55])
表格列比较规范
具有一般形式:Sp::ex(string <规范标记>, string <列名>, string <列名>)
表格列比较规范类型
"cs="- 检查两列的值是否相等,如字符串(按字符)"cs!="- 检查两列的值是否不相等,如字符串(按字符)"cs>"、"cs!>"、"cs>="、"cs<"、"cs!<"、"cs<="- 比较两列的值,如字符串(按字符)"clike"- 检查行第二列的值是否作为子串出现在第一列"c!like"- 检查行第二列的值是否不作为子串出现在第一列"cn="- 检查行表中两列的值作为数字是否相等"cn!="- 检查行表中两列的值作为数字是否不相等"cn>","cn!>","cn>=","cn<","cn!<","cn<="- 比较行表中两列的值作为数字
示例
Sp::ex("cs<=", "contractsCount", "requestsCount")
比较 c 数字值的规范
具有以下形式:Sp::ex(string <规范符号>, string <列名>, float|int|stringNumber <数字值>)
比较 c 数字值的规范类型
"n="- 检查列值与指定的数字值是否相等(非 NULL-安全)"n!="- 检查列值与指定的数字值是否不相等(非 NULL-安全)"n>","n!>","n>=","n<","n!<","n<="- 比较列值与指定的数字值
示例
Sp::ex("n=", "winsCount", "losesCount")
比较 c 字符串值的规范
具有以下形式:Sp::ex(string <规范符号>, string <列名>, string <字符串值>)
比较 c 字符串值的规范类型
"s="- 检查列值与指定的字符串值是否相等(非 NULL-安全)"s!="- 检查列值与指定的字符串值是否不相等(非 NULL-安全)"s>","s!>","s>=","s<","s!<","s<="- 逐字符比较列值与指定的字符串值"like"- 检查字符串值是否作为子串出现在列值中
示例
Sp::ex("s=", "name", "Bob")
一元比较规范
具有以下形式:Sp::ex(string <规范符号>, string <列名>)
一元比较规范类型
"null"- 检查列值是否等于 NULL"!null"- 检查列值是否不等于 NULL"empty"- 检查列值是否等于 NULL 或空字符串"!empty"- 检查列值是否不等于 NULL 或空字符串
示例
Sp::ex("empty", "comment")
复杂复合规范
具有以下形式:Sp::ex(string <规范符号>, SpecificationInterface[] <子规范数组>)
复杂组成规格的类型
"and"- 规格对应于满足所有子规格条件的数据记录"and"- 规格对应于满足子规格中任一条件的数据记录
示例
Sp::ex("and", [Sp::ex("!empty", "birthday"), Sp::ex("!empty", "age")])
一元组成规格
具有以下通用形式:Sp::ex(string <знак规格>, SpecificationInterface <子规格>)
一元组成规格的类型
"!"- 对子规格进行非空安全否定。
示例
Sp::ex("!", Sp::ex("c=", "managerUuid", "customerUuid"))
将结构转换为规格 / Преобразование структур в спецификации
ENG
类 Sp 允许您将结构转换为规格。这在您需要在某个存储库中检查与特定结构在许多方面相似的记录的存在时很有用。使用 Sp::st() 方法
示例
$struct = new Structure(['name' => 'Victoria', 'age' => 21]);
$spec = Sp::st($struct, 'and');
// 结果将等同于以下代码
$spec = Sp::ex('and', [
Sp::ex('s=', 'name', 'Victoria')
Sp::ex('s=', 'age', '21');
]);
RUS
类 Sp 允许将结构转换为规格。这在您需要在某个存储库中检查与特定结构在许多方面相似的记录的存在时很有用。使用 Sp::st() 方法
示例
$struct = new Structure(['name' => 'Victoria', 'age' => 21]);
$spec = Sp::st($struct, 'and');
// 结果将等同于以下代码
$spec = Sp::ex('and', [
Sp::ex('s=', 'name', 'Victoria')
Sp::ex('s=', 'age', '21');
]);