- The documentation is written in two languages: Russian and English.
- Документация написана на двух языках: русском и английском.
The package provides objects and an interface for expression of specifications (describes the conditions for fetching records from storage). For quick construction, use Sp::ex() builder.
Пакет предоставляет объекты и интерфейс для выражения спецификаций (описывают услоние выборки записей из хранилища). Для быстрого построения используется билдер Sp::ex()
- PHP >= 7.4
- Composer >=2.0
composer require "mnemesong/spex"
Specifications allow you to specify a condition for searching or selecting records, including logically complex ones.
The ex() method of class Sp allows you to quickly express any specification of various types. Its general syntax looks like as follows
Sp::ex(<spec character>, <column name>, <additional comparison parameter(column name, value or null)>);
Additional type parameter depends on the specification type. There are several types of specifications:
They have the general form: Sp::ex(string <spec mark>, string <column name>,
array <comparison array>)
"in"
- checks whether the value in the column is included in the comparison array"!in"
- checks whether the value in the column is not included in the comparison array
Sp::ex("in", "age", [11, 22, 33, 44, 55])
Have a general form: Sp::ex(string <spec mark>, string <column name>, string <column name>)
"cs="
- checks the equality of values in two columns of the same table row as strings (character by character)"cs!="
- checks the inequality of values in two columns of the same table row as strings (character by character)"cs>"
,"cs!>"
,"cs>="
,"cs<"
,"cs!<"
,"cs<="
- compare values in two columns of one table row as strings (character by character)"clike"
- checks whether the value of the second column of the string is included in the first column as a substring"c!like"
- checks whether the value of the second column of the string is тще included in the first column as a substring"cn="
- checks the equality of values in two columns of the same table row as numbers"cn!="
- checks the inequality of values in two columns of the same table row as numbers"cn>"
,"cn!>"
,"cn>="
,"cn<"
,"cn!<"
,"cn<="
- compare values in two columns of the same table row as numbers
Sp::ex("cs<=", "contractsCount", "requestsCount")
They have the general form: Sp::ex(string <spec character>, string <column name>,
float|int|stringNumber <numerical value>)
"n="
- checks for equality (not NULL-safe) of a column value with a specified numeric value"n!="
- checks for inequality (non-NULL-safe) values of a column with a specified numeric value"n>"
,"n!>"
,"n>="
,"n<"
,"n!<"
,"n<="
- compares the value of the column with the specified numeric value
Sp::ex("n=", "winsCount", "losesCount")
They have the general form: Sp::ex(string <spec character>, string <column name>,
string <string value>)
"s="
- checks for equality (not NULL-safe) of a column value with the specified string value"s!="
- checks if the value of the column with the specified string value is not NULL-safe"s>"
,"s!>"
,"s>="
,"s<"
,"s!<"
,"s<="
- compare character by character values of the column with the specified string value"like"
- checks if a string value is a substring of a value in a column
Sp::ex("s=", "name", "Bob")
They have a general form: Sp::ex(string <spec mark>, string <column name>)
"null"
- checks if the value of the column is NULL"!null"
- checks if the column value is null"empty"
- checks for equality in a NULL column or an empty string"!empty"
- checks if value is not NULL column or empty string
Sp::ex("empty", "comment")
They have the general form: Sp::ex(string <spec mark>, SpecificationInterface[] <
array of child specifications>)
"and"
- specifications correspond to entries for which all conditions specified are met in child specifications"and"
- specifications correspond to the record for which one of the conditions specified will be met in child specifications
Sp::ex("and", [Sp::ex("!empty", "birthday"), Sp::ex("!empty", "age")])
They have the general form: Sp::ex(string <spec mark>, SpecificationInterface <child specification>)
"!"
is a non-null-safe negation of a child specification.
Sp::ex("!", Sp::ex("c=", "managerUuid", "customerUuid"))
Спецификации позволяют указывать условие для поиска или отбора записей, в том числе логически сложные.
Метод ex() класса Sp позволяет быстро выражать любые спецификации различных типов. Его общий синтаксис выгляди следующим образом
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 <знак спецификации>, string <имя колонки>, float|int|stringNumber <числовое значение>)
"n="
- проверяет равенство (не NULL-безопасное) значения колонке с указанным числовым значением"n!="
- проверяет неравенство (не NULL-безопасное) значения колонке с указанным числовым значением"n>"
,"n!>"
,"n>="
,"n<"
,"n!<"
,"n<="
- сравнивает значения колонке с указанным числовым значением
Sp::ex("n=", "winsCount", "losesCount")
Имеют общий вид: Sp::ex(string <знак спецификации>, string <имя колонки>, string <строковое значение>)
"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 <дочерняя спецификация>)
"!"
- не Null-безопасное отрицание дочерней спецификации.
Sp::ex("!", Sp::ex("c=", "managerUuid", "customerUuid"))
The class Sp
allows you to turn Structures into specifications. This is useful when you need to check in some repository
the presence of records in many respects similar to a specific structure. Use the Sp::st()
$struct = new Structure(['name' => 'Victoria', 'age' => 21]);
$spec = Sp::st($struct, 'and');
// The result will be equivalent to the following code:
$spec = Sp::ex('and', [
Sp::ex('s=', 'name', 'Victoria')
Sp::ex('s=', 'age', '21');
]);
Класс 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');
]);
- Anatoly Starodubtsev "Pantagruel74" - tostar74@mail.ru