Class FunctionExpression
This class represents a function call string in a SQL statement. Calls can be constructed by passing the name of the function and a list of params. For security reasons, all params passed are quoted by default unless explicitly told otherwise.
Сводка свойств
- $_conditions protected
arrayСписок строк или других объектов выражений, представляющих «ветви» дерева выражений. Например, один ключ массива может выглядеть как "sum > :value"
- $_conjunction protected
stringСтрока, используемая для объединения каждого из внутренних выражений, которые этот объект хранит внутри, например, «И», «ИЛИ» и т. д.
- $_name protected
stringИмя функции, которая должна быть построена при генерации SQL-строки
- $_returnType protected
stringИмя типа, который вернёт это выражение при выполнении
- $_typeMap protected
Cake\Database\TypeMap|null
Сводка методов
-
__clone() public
Клонировать этот объект и его поддерево выражений.
-
__construct() public
Конструктор. Принимает имя вызываемой функции и список параметров, которые должны быть переданы в функцию. Дополнительно вы можете передать список типов, которые должны использоваться для каждого связанного параметра.
-
_addConditions() protected
Вспомогательная функция, используемая для разложения вложенного массива условий и построения структуры дерева внутри этого объекта для представления полного выражения SQL. Строковые условия хранятся непосредственно в условиях, а любое другое представление оборачивается соответствующим экземпляром или этого класса.
-
_calculateType() protected
Возвращает имя типа для переданного поля, если оно было сохранено в typeMap.
-
_castToExpression() protected
Условно преобразует переданное значение в объект ExpressionInterface, если класс типа реализует ExpressionTypeInterface. В противном случае возвращает значение без изменений.
-
_parseCondition() protected
Парсит строковые условия, пытаясь извлечь оператор внутри них, если таковой имеется, и, наконец, возвращает либо соответствующий объект QueryExpression, либо просто строковое представление условия. Эта функция отвечает за создание заглушек и замену значений на них, одновременно сохраняя значение в другом месте для будущей привязки.
-
_requiresToExpressionCasting() protected
Возвращает массив типов, для которых значения должны быть преобразованы в выражения из списка имен типов, переданных в качестве параметра.
-
add() public
Добавляет один или несколько аргументов для вызова функции.
-
addCase() public
Добавляет новое выражение case в объект выражения.
-
and() public
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в «И»
-
and_() public deprecated
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в «И»
-
between() public
Добавляет новое условие к объекту выражения в форме «поле МЕЖДУ от И до».
-
count() public
Само имя функции является выражением для генерации, поэтому всегда добавляет 1 к количеству выражений, хранящихся в этом объекте.
-
eq() public
Добавляет новое условие к объекту выражения в форме «поле = значение».
-
equalFields() public
Создаёт условие равенства или присваивание с идентификатором обертки.
-
exists() public
Добавляет новое условие к объекту выражения в форме «СУЩЕСТВУЕТ (...)».
-
getConjunction() public
Получает текущую конъюнкцию для условий на этом уровне дерева выражения.
-
getDefaultTypes() public
Получает значения по умолчанию для текущей type map.
-
getName() public
Получает имя SQL-функции, которая должна быть вызвана в этом выражении.
-
getReturnType() public
Получает тип значения, которое сгенерирует этот объект.
-
getTypeMap() public
Возвращает существующую type map.
-
gt() public
Добавляет новое условие к объекту выражения в форме «поле > значение».
-
gte() public
Добавляет новое условие к объекту выражения в форме «поле >= значение».
-
hasNestedExpression() public
Возвращает true, если это выражение содержит другие вложенные объекты ExpressionInterface.
-
in() public
Добавляет новое условие к объекту выражения в форме «поле В (значение1, значение2)».
-
isCallable() public deprecated
Проверка того, является ли вызываемый элемент приемлемым.
-
isNotNull() public
Добавляет новое условие к объекту выражения в форме «поле НЕ NULL».
-
isNull() public
Добавляет новое условие к объекту выражения в форме «поле IS NULL».
-
iterateParts() public
Выполняет вызываемую функцию для каждой из частей, составляющих это выражение.
-
like() public
Добавляет новое условие к объекту выражения в форме «поле LIKE значение».
-
lt() public
Добавляет новое условие к объекту выражения в форме «поле < значение».
-
lte() public
Добавляет новое условие к объекту выражения в форме «поле <= значение».
-
not() public
Добавляет новый набор условий на этот уровень дерева и инвертирует окончательный результат, добавив NOT. Это будет выглядеть как «НЕ ( (условие1) И (условия2) )». Конъюнкция зависит от текущей конъюнкции для этого объекта.
-
notEq() public
Добавляет новое условие к объекту выражения в форме «поле != значение».
-
notExists() public
Добавляет новое условие к объекту выражения в форме «НЕ СУЩЕСТВУЕТ (...)».
-
notIn() public
Добавляет новое условие к объекту выражения в форме «поле НЕ В (значение1, значение2)».
-
notLike() public
Добавляет новое условие к объекту выражения в форме «поле НЕ LIKE значение».
-
or() public
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в «ИЛИ».
-
or_() public deprecated
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в «ИЛИ».
-
setConjunction() public
Изменяет конъюнкцию для условий на этом уровне дерева выражения.
-
setDefaultTypes() public
Переопределяет отображения типов по умолчанию для полей в реализующем объекте.
-
setName() public
Устанавливает имя SQL-функции, которая должна быть вызвана в этом выражении.
-
setReturnType() public
Устанавливает тип значения, которое будет генерировать этот объект.
-
setTypeMap() public
Создает новую TypeMap, если $typeMap является массивом, иначе обменивает её на заданную.
-
sql() public
Преобразует узел в фрагмент строки SQL.
-
traverse() public
Итерирует по каждой части выражения рекурсивно для каждого уровня дерева выражений и выполняет вызываемый объект $callback, передавая в качестве первого параметра экземпляр выражения, по которому в данный момент итерируется.
Методы
__clone() public
__clone(): void
Клонировать этот объект и его поддерево выражений.
Возвращает
void__construct() public
__construct(string $name, array $params = [], array $types = [], string $returnType = 'string')
Конструктор. Принимает имя вызываемой функции и список параметров, которые будут переданы в функцию. Дополнительно можно передать список типов, используемых для каждого связанного параметра.
По умолчанию все передаваемые параметры будут заключены в кавычки. Если вы хотите использовать литеральные аргументы, необходимо явно указать это.
Примеры:
$f = new FunctionExpression('CONCAT', ['CakePHP', ' rules']);
Предыдущая строка сгенерирует CONCAT('CakePHP', ' rules')
$f = new FunctionExpression('CONCAT', ['name' => 'literal', ' rules']);
Что приведет к CONCAT(name, ' rules')
Параметры
-
string$name имя вызываемой функции
-
array$params необязательно список аргументов, которые будут переданы функции. Если ассоциативный массив, ключ будет использоваться как аргумент, когда значение равно 'литерал'
-
array$types необязательно ассоциативный массив типов, которые будут ассоциированы с переданными аргументами
-
string$returnType необязательно тип возвращаемого значения этого выражения
_addConditions() protected
_addConditions(array $conditions, array $types): void
Вспомогательная функция, используемая для разложения вложенного массива условий и построения структуры дерева внутри этого объекта для представления полного SQL выражения. Строковые условия хранятся непосредственно в условиях, в то время как любые другие представления обернуты соответствующим экземпляром или этого класса.
Параметры
-
array$conditions список условий, которые необходимо сохранить в этом объекте
-
array$types список типов, связанных с полями, на которые ссылаются $conditions
Возвращает
void_calculateType() protected
_calculateType(stringCake\Database\ExpressionInterface $field): string|null
Возвращает имя типа для переданного поля, если оно было сохранено в typeMap.
Параметры
-
stringCake\Database\ExpressionInterface$field Имя поля, для которого необходимо получить тип.
Возвращает
string|null_castToExpression() protected
_castToExpression(mixed $value, string|null $type = null): mixed
Условно преобразует переданное значение в объект ExpressionInterface, если класс типа реализует ExpressionTypeInterface. В противном случае возвращает значение без изменений.
Параметры
-
mixed$value Значение, которое нужно преобразовать в ExpressionInterface
-
string|null$type необязательно Имя типа
Возвращает
mixed_parseCondition() protected
_parseCondition(string $field, mixed $value): stringCake\Database\ExpressionInterface
Парсит строковые условия, пытаясь извлечь оператор, если таковой имеется, и в конечном итоге возвращает либо соответствующий объект QueryExpression, либо просто строковое представление условия. Эта функция отвечает за генерацию заглушек и замену значений на них, а также за сохранение значения в другом месте для будущей привязки.
Параметры
-
string$field Значение, из которого будут извлечены фактическое поле и оператор.
-
mixed$value Значение, которое нужно привязать к заглушке для поля
Возвращает
stringCake\Database\ExpressionInterfaceИсключения
InvalidArgumentExceptionЕсли оператор недействителен или отсутствует при использовании NULL.
_requiresToExpressionCasting() protected
_requiresToExpressionCasting(array $types): array
Возвращает массив с типами, для которых значения должны быть преобразованы в выражения из списка имен типов, переданных в качестве параметра.
Параметры
-
array$types Список имен типов
Возвращает
arrayadd() public
add(array $conditions, array $types = [], bool $prepend = false): $this
Добавляет один или несколько аргументов для вызова функции.
Параметры
-
array$conditions список аргументов, которые будут переданы функции. Если ассоциативный массив, ключ будет использоваться как аргумент, когда значение равно 'литерал'
-
array$types необязательно ассоциативный массив типов, которые будут ассоциированы с переданными аргументами
-
bool$prepend необязательно Должен ли добавляться перед или после списка аргументов
Возвращает
$thisСм. также
addCase() public
addCase(arrayCake\Database\ExpressionInterface $conditions, arrayCake\Database\ExpressionInterface $values = [], array $types = []): $this
Добавляет новое выражение case в объект выражения
Параметры
-
arrayCake\Database\ExpressionInterface$conditions Условия для проверки. Должен быть экземпляр ExpressionInterface или массив экземпляров ExpressionInterface.
-
arrayCake\Database\ExpressionInterface$values необязательно ассоциативный массив значений, которые будут ассоциированы с условиями, переданными в $conditions. Если значений $values больше, чем условий $conditions, последнее значение $value используется как значение
ELSE.-
array$types необязательно ассоциативный массив типов, которые будут ассоциированы со значениями, переданными в $values
Возвращает
$thisand() public
and(Closure|string|arrayCake\Database\ExpressionInterface $conditions, array $types = []): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression, содержащий все переданные условия, и устанавливает конъюнкцию в «И».
Параметры
-
Closure|string|arrayCake\Database\ExpressionInterface$conditions для объединения с И
-
array$types необязательно ассоциативный массив полей, указывающих на тип значений, которые передаются. Используется для правильной привязки значений к операторам.
Возвращает
Cake\Database\Expression\QueryExpressionand_() public
and_(Closure|string|arrayCake\Database\ExpressionInterface $conditions, array $types = []): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression, содержащий все переданные условия, и устанавливает конъюнкцию в «И».
Параметры
-
Closure|string|arrayCake\Database\ExpressionInterface$conditions для объединения с И
-
array$types необязательно ассоциативный массив полей, указывающих на тип значений, которые передаются. Используется для правильной привязки значений к операторам.
Возвращает
Cake\Database\Expression\QueryExpressionbetween() public
between(stringCake\Database\ExpressionInterface $field, mixed $from, mixed $to, string|null $type = null): $this
Добавляет новое условие в объект выражения в форме «поле МЕЖДУ от И до».
Параметры
-
stringCake\Database\ExpressionInterface$field Имя поля, которое необходимо сравнить со значениями в диапазоне.
-
mixed$from Начальное значение диапазона.
-
mixed$to Конечное значение в диапазоне сравнения.
-
string|null$type необязательно имя типа для $value, как настроено с помощью Type map.
Возвращает
$thiscount() public
count(): int
Название функции само по себе является выражением для генерации, поэтому всегда добавляет 1 к количеству выражений, хранящихся в этом объекте.
Возвращает
inteq() public
eq(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие в объект выражения в форме «поле = значение».
Параметры
-
stringCake\Database\ExpressionInterface$field Базовое поле, которое необходимо сравнить со значением
-
mixed$value Значение, которое должно быть привязано к $field для сравнения
-
string|null$type необязательно имя типа для $value, как настроено с помощью Type map. Если оно имеет суффикс «[]» и значение является массивом, то будет создано несколько заглушек, по одной для каждого значения в массиве.
Возвращает
$thisequalFields() public
equalFields(string $leftField, string $rightField): $this
Создаёт условие равенства или присваивание с обёрткой идентификатора.
Параметры
-
string$leftField Имя поля условия левого соединения.
-
string$rightField Имя поля условия правого соединения.
Возвращает
$thisexists() public
exists(Cake\Database\ExpressionInterface $expression): $this
Добавляет новое условие к объекту выражения в форме "EXISTS (...)".
Параметры
-
Cake\Database\ExpressionInterface$expression вложенный запрос
Возвращает
$thisgetConjunction() public
getConjunction(): string
Получает текущую конъюнкцию для условий на данном уровне дерева выражений.
Возвращает
stringgetDefaultTypes() public
getDefaultTypes(): array
Получает типы по умолчанию для текущей карты типов.
Возвращает
arraygetName() public
getName(): string
Получает имя SQL функции, которая должна быть вызвана в этом выражении.
Возвращает
stringgetReturnType() public
getReturnType(): string
Получает тип значения, которое сгенерирует этот объект.
Возвращает
stringgetTypeMap() public
getTypeMap(): Cake\Database\TypeMap
Возвращает существующую карту типов.
Возвращает
Cake\Database\TypeMapgt() public
gt(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле > значение".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
mixed$value Значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thisgte() public
gte(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле >= значение".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
mixed$value Значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thishasNestedExpression() public
hasNestedExpression(): bool
Возвращает true, если это выражение содержит другие вложенные объекты ExpressionInterface.
Возвращает
boolin() public
in(stringCake\Database\ExpressionInterface $field, string|arrayCake\Database\ExpressionInterface $values, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле IN (значение1, значение2)".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
string|arrayCake\Database\ExpressionInterface$values значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thisisCallable() public
isCallable(callable|string|arrayCake\Database\ExpressionInterface $callable): bool
Проверяет, является ли вызов допустимым.
Мы не принимаем обратные вызовы в формате ['класс', 'метод'], так как они часто содержат пользовательский ввод, а массивы строк легко подменить.
Параметры
-
callable|string|arrayCake\Database\ExpressionInterface$callable Вызов для проверки.
Возвращает
boolisNotNull() public
isNotNull(stringCake\Database\ExpressionInterface $field): $this
Добавляет новое условие к объекту выражения в форме "поле НЕ NULL".
Параметры
-
stringCake\Database\ExpressionInterface$field поле базы данных, проверяемое на не-NULL
Возвращает
$thisisNull() public
isNull(stringCake\Database\ExpressionInterface $field): $this
Добавляет новое условие к объекту выражения в форме "поле IS NULL".
Параметры
-
stringCake\Database\ExpressionInterface$field поле базы данных, проверяемое на NULL
Возвращает
$thisiterateParts() public
iterateParts(callable $callback): $this
Выполняет функцию обратного вызова для каждой части, составляющей это выражение.
Функция обратного вызова должна вернуть значение, которым будет заменена текущая посещаемая часть. Если функция обратного вызова возвращает null, то часть полностью удаляется из этого выражения.
Функция обратного вызова получит каждое условие как первый параметр и ключ как второй параметр. Второй параметр можно объявить как передаваемый по ссылке, это позволит изменить ключ, под которым хранится изменённая часть.
Параметры
-
callable$callback Функция обратного вызова, применяемая к каждой части.
Возвращает
$thislike() public
like(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле LIKE значение".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
mixed$value Значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thislt() public
lt(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле < значение".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
mixed$value Значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thislte() public
lte(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле <= значение".
Параметры
-
stringCake\Database\ExpressionInterface$field Поле базы данных, которое сравнивается со значением
-
mixed$value Значение, которое привязывается к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено в карте типов.
Возвращает
$thisnot() public
not(string|arrayClosureCake\Database\ExpressionInterface $conditions, array $types = []): $this
Добавляет новые условия на этот уровень дерева и инвертирует окончательный результат, добавив NOT, будет выглядеть как "НЕ ( (условие1) И (условия2) )" конъюнкция зависит от текущей конъюнкции для этого объекта.
Параметры
-
string|arrayClosureCake\Database\ExpressionInterface$conditions для добавления и инвертирования
-
array$types optional ассоциативный массив полей, указывающих на тип значений, которые передаются. Используется для корректной привязки значений к операторам.
Возвращает
$thisnotEq() public
notEq(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле != значение".
Parameters
-
stringCake\Database\ExpressionInterface$field Поле базы данных для сравнения со значением
-
mixed$value Значение, которое будет привязано к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено с помощью карты типов. Если оно заканчивается на "[]" и значение является массивом, то будет создано несколько заполнителей, по одному для каждого значения в массиве.
Returns
$thisnotExists() public
notExists(Cake\Database\ExpressionInterface $expression): $this
Добавляет новое условие к объекту выражения в форме "NOT EXISTS (...)".
Parameters
-
Cake\Database\ExpressionInterface$expression внутренний запрос
Returns
$thisnotIn() public
notIn(stringCake\Database\ExpressionInterface $field, string|arrayCake\Database\ExpressionInterface $values, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле NOT IN (значение1, значение2)".
Parameters
-
stringCake\Database\ExpressionInterface$field Поле базы данных для сравнения со значением
-
string|arrayCake\Database\ExpressionInterface$values значение, которое будет привязано к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено с помощью карты типов.
Returns
$thisnotLike() public
notLike(stringCake\Database\ExpressionInterface $field, mixed $value, string|null $type = null): $this
Добавляет новое условие к объекту выражения в форме "поле NOT LIKE значение".
Parameters
-
stringCake\Database\ExpressionInterface$field Поле базы данных для сравнения со значением
-
mixed$value Значение, которое будет привязано к $field для сравнения
-
string|null$type optional имя типа для $value, как настроено с помощью карты типов.
Returns
$thisor() public
or(Closure|string|arrayCake\Database\ExpressionInterface $conditions, array $types = []): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в "OR".
Parameters
-
Closure|string|arrayCake\Database\ExpressionInterface$conditions для соединения с OR
-
array$types optional ассоциативный массив полей, указывающий на тип передаваемых значений. Используется для правильного связывания значений с операторами.
Returns
Cake\Database\Expression\QueryExpressionor_() public
or_(Closure|string|arrayCake\Database\ExpressionInterface $conditions, array $types = []): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression, содержащий все переданные условия и устанавливает конъюнкцию в "OR".
Parameters
-
Closure|string|arrayCake\Database\ExpressionInterface$conditions для соединения с OR
-
array$types optional ассоциативный массив полей, указывающий на тип передаваемых значений. Используется для правильного связывания значений с операторами.
Returns
Cake\Database\Expression\QueryExpressionsetConjunction() public
setConjunction(string $conjunction): $this
Изменяет конъюнкцию для условий на этом уровне дерева выражений.
Parameters
-
string$conjunction Значение, которое будет использоваться для соединения условий
Returns
$thissetDefaultTypes() public
setDefaultTypes(array $types): $this
Перезаписывает сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно установить сопоставления типов, которые используются в нескольких функциях/выражениях в запросе.
Чтобы добавить значение по умолчанию без перезаписи существующих, используйте getTypeMap()->addDefaults()
Parameters
-
array$types Массив типов для установки.
Returns
$thisSee Also
setName() public
setName(string $name): $this
Устанавливает имя SQL-функции, которая будет вызвана в этом выражении.
Parameters
-
string$name Имя функции
Returns
$thissetReturnType() public
setReturnType(string $type): $this
Устанавливает тип значения, которое будет генерировать этот объект.
Parameters
-
string$type Имя типа, который должен быть возвращен
Returns
$thissetTypeMap() public
setTypeMap(arrayCake\Database\TypeMap $typeMap): $this
Создает новый TypeMap, если $typeMap является массивом, в противном случае заменяет его на заданный.
Parameters
-
arrayCake\Database\TypeMap$typeMap Создает TypeMap, если массив, в противном случае устанавливает заданный TypeMap
Returns
$thissql() public
sql(Cake\Database\ValueBinder $binder): string
Преобразует узел в фрагмент строки SQL.
Parameters
-
Cake\Database\ValueBinder$binder
Returns
stringtraverse() public
traverse(Closure $callback): $this
Итерирует по каждой части выражения рекурсивно для каждого уровня дерева выражений и выполняет вызываемый объект $callback, передавая в качестве первого параметра экземпляр выражения, который в данный момент итерируется.
Parameters
-
Closure$callback
Returns
$thisПодробное описание свойств
$_conditions protected
Список строк или других объектов выражений, которые представляют "ветви" дерева выражений. Например, один ключ массива может выглядеть как "сумма > :значение"
Type
array$_conjunction protected
Строка, которая будет использоваться для соединения каждого из внутренних выражений, которые этот объект внутренне хранит, например "AND", "OR" и т.д.
Type
string$_name protected
Имя функции, которая будет построена при генерации строки SQL
Type
string$_returnType protected
Имя типа, которое это выражение будет возвращать после выполнения
Type
string$_typeMap protected
Type
Cake\Database\TypeMap|null
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.2/class-Cake.Database.Expression.FunctionExpression.html