Класс Query
Этот класс представляет SQL-запрос к реляционной базе данных. Запрос может быть разных типов, таких как select, update, insert и delete. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в определённый диалект SQL.
Константы
-
stringJOIN_TYPE_INNER'INNER'
-
stringJOIN_TYPE_LEFT'LEFT'
-
stringJOIN_TYPE_RIGHT'RIGHT'
Краткое описание свойств
- $_connection protected
Cake\Database\ConnectionЭкземпляр подключения, используемый для выполнения этого запроса.
- $_deleteParts protected deprecated
array<string>Список частей запроса для генерации оператора DELETE.
- $_dirty protected
boolУказывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullЭкземпляр объекта-генератора функций, используемого для генерации произвольных SQL-функций.
- $_insertParts protected deprecated
array<string>Список частей запроса для генерации оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_parts protected
array<string, mixed>Список SQL-частей, которые будут использоваться для построения этого запроса.
- $_resultDecorators protected
array<callable>Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при получении. Каждая из функций обратного вызова будет получать массив строк в качестве первого аргумента.
- $_selectParts protected deprecated
array<string>Список частей запроса для генерации оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в операторе SELECT.
- $_type protected
stringТип этого запроса (select, insert, update, delete).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected deprecated
array<string>Список частей запроса для генерации оператора UPDATE.
- $_useBufferedResults protected
boolБулево значение для отслеживания включения буферизованных результатов.
- $_valueBinder protected
Cake\Database\ValueBinder|nullОбъект, ответственный за генерацию заполнитель запросов и временное хранение значений, связанных с каждым из них.
- $typeCastEnabled protected
boolФлаг отслеживания для отключения приведения типов.
Краткое описание методов
-
__clone() public
Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.
-
__construct() public
Конструктор.
-
__debugInfo() public
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
-
__toString() public
Возвращает строковое представление этого запроса (полное SQL-утверждение).
-
_conjugate() protected
Вспомогательная функция, используемая для построения условий путём объединения объектов QueryExpression.
-
_decorateStatement() protected
Вспомогательная функция, используемая для обертывания исходного утверждения из драйвера любыми зарегистрированными обратными вызовами.
-
_dirty() protected
Помечает запрос как изменённый, удаляя любую предварительно обработанную информацию из кэша в памяти.
-
_expressionsVisitor() protected
Метод обхода частей запроса, используемый методом traverseExpressions()
-
_makeJoin() protected
Возвращает массив, который может быть передан методу join, описывающему одно условие объединения.
-
andHaving() public
Подключает любой ранее определённый набор условий к предоставленному списку с использованием оператора AND в предложении HAVING. Этот метод работает точно так же, как и метод
andWhere(). Обратитесь к документации этого метода для получения информации о том, как использовать каждый параметр. -
andWhere() public
Подключает любой ранее определённый набор условий к предоставленному списку с использованием оператора AND. Эта функция принимает список условий в том же формате, что и метод
where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки. -
bind() public
Связывает заполнитель запроса со значением и типом.
-
clause() public
Возвращает данные, которые были сохранены в указанном предложении. Это полезно для изменения любой внутренней части запроса, и его используют диалекты SQL для преобразования запроса соответствующим образом перед выполнением. Допустимые предложения, которые можно получить: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
-
decorateResults() public
Регистрирует обратный вызов, который выполняется для каждого результата, извлечённого из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с необработанными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с возможными изменениями.
-
delete() public
Создать запрос на удаление.
-
disableBufferedResults() public
Отключает буферизацию результатов.
-
disableResultsCasting() public
Отключает приведение типов результатов.
-
distinct() public
Добавляет предложение
DISTINCTв запрос для удаления дубликатов из набора результатов. Это предложение может быть использовано только для запросов select. -
enableBufferedResults() public
Включает/Отключает буферизацию результатов.
-
enableResultsCasting() public
Включает приведение типов результатов.
-
epilog() public
Строка или выражение, которое будет добавлено к сгенерированному запросу
-
execute() public
Компилирует SQL-представление этого запроса и выполняет его с использованием объекта подключения, настроенного в программе. Возвращает объект результирующего утверждения.
-
expr() public
Возвращает новый объект QueryExpression. Это удобная функция при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования более специализированного класса QueryExpression, если это необходимо.
-
from() public
Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
-
func() public
Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных SQL-функций.
-
getConnection() public
Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
-
getDefaultTypes() public
Получает типы по умолчанию для текущей карты типов.
-
getIterator() public
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать по запросу без необходимости вызывать execute() вручную, что делает запрос похожим на набор результатов, а не на сам запрос.
-
getSelectTypeMap() public
Получает класс TypeMap, где хранятся типы для каждого поля в предложении select.
-
getTypeMap() public
Возвращает существующую карту типов.
-
getValueBinder() public
Возвращает текущий используемый экземпляр ValueBinder.
-
group() public
Добавляет одно или несколько полей, которые будут использоваться в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
-
having() public
Добавляет условие или набор условий, которые будут использоваться в предложении
HAVINGдля этого запроса. Этот метод работает точно так же, как и методwhere(). Обратитесь к документации этого метода для получения информации о том, как использовать каждый параметр. -
identifier() public
Создаёт выражение, которое ссылается на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
-
innerJoin() public
Добавляет одно
INNER JOINусловие в запрос. -
insert() public
Создать запрос на вставку.
-
into() public
Установить имя таблицы для запросов вставки.
-
isBufferedResultsEnabled() public
Возвращает, включена ли/выключена ли буферизация результатов.
-
isResultsCastingEnabled() public
Возвращает, включено ли/выключено ли приведение типов результатов.
-
join() public
Добавляет одну или несколько таблиц для использования в качестве условий JOIN в этом запросе. Таблицы могут быть переданы в виде массива строк, массива, описывающего части соединения, массива с несколькими описаниями соединений или одной строкой.
-
leftJoin() public
Добавляет условие
LEFT JOINв запрос. -
limit() public
Устанавливает количество записей, которое должно быть извлечено из базы данных, принимает целое число или объект выражения, результатом оценки которого является целое число. В некоторых базах данных эта операция может быть не поддерживаемой или потребует преобразования запроса для ограничения размера набора результатов.
-
modifier() public
Добавляет один или несколько модификаторов
SELECTдля использования вSELECT. -
newExpr() public
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с помощью интерфейса fluent. Также можно переопределить эту функцию в подклассах для использования специализированного класса QueryExpression, если это необходимо.
-
offset() public
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Часто используется для постраничной навигации по большим результатам. Принимает целое число или объект выражения, результатом оценки которого является целое число.
-
order() public
Добавляет одно или несколько полей для использования в операторе ORDER для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки.
-
orderAsc() public
Добавляет оператор ORDER BY со значением ASC.
-
orderDesc() public
Добавляет оператор ORDER BY со значением DESC.
-
page() public
Устанавливает страницу результатов, которую вы хотите получить.
-
removeJoin() public
Удаляет соединение, если оно было определено.
-
rightJoin() public
Добавляет условие
RIGHT JOINв запрос. -
rowCountAndClose() public
Выполняет SQL-запрос этого объекта и немедленно закрывает оператор перед возвратом количества измененных строк.
-
select() public
Добавляет новые поля, которые должны быть возвращены оператором
SELECTпри выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки. -
set() public
Устанавливает одно или несколько полей для обновления.
-
setConnection() public
Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования этого запроса.
-
setDefaultTypes() public
Переопределяет соответствия типов по умолчанию для полей в реализуемом объекте.
-
setSelectTypeMap() public
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
-
setTypeMap() public
Создаёт новый TypeMap, если $typeMap является массивом, в противном случае меняет его на заданный.
-
setValueBinder() public
Переопределяет текущий связыватель значений
-
sql() public
Возвращает SQL-представление этого объекта.
-
traverse() public
Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты с помощью переменных в замыкании или переменных экземпляра. Эта функция обычно используется для обхода всех частей запроса, которые будут использоваться для построения запроса.
-
traverseExpressions() public
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход всего дерева выражений. Она выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося в этом запросе на любой глубине вложения в любой части запроса.
-
traverseParts() public
Переберёт предоставленные части.
-
type() public
Возвращает тип этого запроса (select, insert, update, delete)
-
union() public
Добавляет завершённый запрос для использования совместно с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с результатом запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько нужно, вызвав этот метод несколько раз с разными запросами.
-
unionAll() public
Добавляет завершённый запрос для использования совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с результатом запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько нужно, вызвав этот метод несколько раз с разными запросами.
-
update() public
Создаёт запрос на обновление.
-
values() public
Устанавливает значения для запроса вставки.
-
where() public
Добавляет условие или набор условий для использования в операторе WHERE для этого запроса. Условия могут быть выражены в виде массива полей в качестве ключей с операторами сравнения в нём, значения массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
-
whereInList() public
Добавляет условие IN или набор условий для использования в операторе WHERE для этого запроса.
-
whereNotInList() public
Добавляет условие NOT IN или набор условий для использования в операторе WHERE для этого запроса.
-
whereNotInListOrNull() public
Добавляет условие NOT IN или набор условий для использования в операторе WHERE для этого запроса. Это также позволяет полю быть пустым с помощью условия IS NULL, так как нулевое значение приведет к тому, что условие NOT IN всегда будет выполняться.
-
whereNotNull() public
Удобный метод, который добавляет условие NOT NULL в запрос.
-
whereNull() public
Удобный метод, который добавляет условие IS NULL в запрос.
-
window() public
Добавляет именованное окно выражения.
-
with() public
Добавляет новое выражение общего вида (CTE) в запрос.
Подробное описание методов
__clone() public
__clone(): void
Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.
Возвращает
void__construct() public
__construct(Cake\Database\Connection $connection)
Конструктор.
Параметры
-
Cake\Database\Connection$connection Объект подключения, используемый для преобразования и выполнения этого запроса
__debugInfo() public
__debugInfo(): array<string, mixed>
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
array<string, mixed>__toString() public
__toString(): string
Возвращает строковое представление этого запроса (полное SQL-утверждение).
Возвращает
string_conjugate() protected
_conjugate(string $part, Cake\Database\ExpressionInterfaceClosure|array|string|null $append, string $conjunction, array<string, string> $types): void
Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.
Параметры
-
string$part Имя части запроса, к которой следует добавить новую часть
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$append Выражение или функция-построитель, которую нужно добавить. для добавления.
-
string$conjunction тип конъюнкции, который нужно использовать для обработки части
-
array<string, string>$types Ассоциативный массив имён типов, используемых для привязки значений к запросу
Возвращает
void_decorateStatement() protected
_decorateStatement(Cake\Database\StatementInterface $statement): Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface
Вспомогательная функция, используемая для обертывания исходного утверждения из драйвера любыми зарегистрированными обратными вызовами.
Параметры
-
Cake\Database\StatementInterface$statement который нужно украсить
Возвращает
Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface_dirty() protected
_dirty(): void
Помечает запрос как изменённый, удаляя любую предварительно обработанную информацию из кэширования в памяти.
Возвращает
void_expressionsVisitor() protected
_expressionsVisitor(Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface> $expression, Closure $callback): void
Метод обхода частей запроса, используемый traverseExpressions()
Параметры
-
Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface>$expression Выражение запроса или массив выражений.
-
Closure$callback Обратный вызов, который будет выполнен для каждого ExpressionInterface, найденного в этом запросе.
Возвращает
void_makeJoin() protected
_makeJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions, string $type): array
Возвращает массив, который можно передать методу join, описывающий одну строку объединения
Параметры
-
array<string, mixed>|string$table Таблица, с которой нужно объединить
-
Cake\Database\ExpressionInterface|array|string$conditions Условие для объединения.
-
string$type тип объединения для использования
Возвращает
arrayandHaving() public
andHaving(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): $this
Соединяет ранее определённый набор условий с предоставленным списком с помощью оператора AND в предложении HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы понять, как использовать каждый параметр.
Поля HAVING не подходят для использования с пользовательскими данными, поскольку они не проходят проверку на безопасность в конструкторе запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions Условия AND для HAVING.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
Возвращает
$thisСм. также
andWhere() public
andWhere(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): $this
Соединяет ранее определённый набор условий с предоставленным списком с помощью оператора AND. Эта функция принимает список условий в том же формате, что и метод where, следовательно, вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно заметить, что при вызове этой функции любой ранее определённый набор условий для этого запроса будет обрабатываться как один аргумент для оператора AND. Эта функция будет обрабатывать не только недавно определённое условие, но и все условия в целом.
При использовании массива для определения условий создание ограничений из каждой записи массива будет использовать ту же логику, что и с функцией where(). Это означает, что каждая запись массива будет объединена с другой с помощью оператора AND, если вы не вложите условия в массив с помощью другого оператора.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Создаст:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Создаёт:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->or(['author_id' => 1])
->add(['author_id' => 2]);
}); Генерирует следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions Условия, которые нужно добавить с AND.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
Возвращает
$thisСм. также
\Cake\Database\TypeFactory
bind() public
bind(string|int $param, mixed $value, string|int|null $type = null): $this
Связывает заполнитель запроса со значением и типом.
$query->bind(':id', 1, 'integer'); Параметры
-
string|int$param заполнитель, который будет заменён на процитированную версию $value
-
mixed$value Значение, которое нужно связать
-
string|int|null$type optional имя сопоставленного типа, используемое для преобразования при отправке в базу данных
Возвращает
$thisclause() public
clause(string $name): mixed
Возвращает данные, которые хранились в указанном предложении. Это полезно для изменения любой внутренней части запроса, и оно используется диалектами SQL для преобразования запроса соответственно перед его выполнением. Действительные предложения, которые можно получить, это: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
Возвращаемое значение для каждой из этих частей может отличаться. Некоторые предложения используют QueryExpression для внутреннего хранения своего состояния, некоторые используют массивы, а другие могут использовать булевы значения или целые числа. Это сводка типов возвращаемых значений для каждого предложения.
- update: строка Имя таблицы для обновления
- set: QueryExpression
- insert: массив, вернёт массив, содержащий таблицу + столбцы.
- values: ValuesExpression
- select: массив, вернёт пустой массив, если нет полей
- distinct: boolean
- from: массив таблиц
- join: массив
- set: массив
- where: QueryExpression, возвращает null, если не задано
- group: массив
- having: QueryExpression, возвращает null, если не задано
- order: OrderByExpression, возвращает null, если не задано
- limit: целое число или QueryExpression, null, если не задано
- offset: целое число или QueryExpression, null, если не задано
- union: массив
Параметры
-
string$name имя предложения, которое нужно вернуть
Возвращает
mixedВызывает
InvalidArgumentExceptionПри отсутствии указанного предложения.
decorateResults() public
decorateResults(callable|null $callback, bool $overwrite = false): $this
Регистрирует обратный вызов, который будет выполняться для каждого результата, извлеченного из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с исходными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с возможными изменениями.
Обратные вызовы будут выполняться лениво, если для базы данных извлечены только 3 строки, то он будет вызван 3 раза, даже если в курсоре могут быть извлечены дополнительные строки.
Обратные вызовы стекируются в порядке их регистрации, если вы хотите сбросить стек, вызовите эту функцию со вторым параметром, установленным в true.
Если вы хотите удалить все декораторы из стека, установите первый параметр в null, а второй — в true.
Пример
$query->decorateResults(function ($row) {
$row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
return $row;
}); Параметры
-
callable|null$callback Обратный вызов, который будет вызван при извлечении результатов.
-
bool$overwrite optional Указывает, следует ли добавить или заменить все существующие декораторы.
Возвращает
$thisdelete() public
delete(string|null $table = null): $this
Создает запрос на удаление.
Может быть объединен с методами from(), where() и другими для создания запросов на удаление со специфическими условиями.
Параметры
-
string|null$table optional Таблица, которая будет использоваться при удалении.
Возвращает
$thisdisableBufferedResults() public
disableBufferedResults(): $this
Отключает буферизацию результатов.
Отключение буферизации уменьшит использование памяти, так как извлеченные результаты не будут запоминаться для будущих итераций.
Возвращает
$thisdisableResultsCasting() public
disableResultsCasting(): $this
Отключает преобразование результатов.
При отключении поля будут возвращаться так, как они получены из драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.
Возвращает
$thisdistinct() public
distinct(Cake\Database\ExpressionInterface|array|string|bool $on = [], bool $overwrite = false): $this
Добавляет DISTINCT оператор к запросу, чтобы удалить дубликаты из набора результатов. Этот оператор может быть использован только для запросов SELECT.
Если вам нужно отфильтровать дубликаты на основе строк, которые содержат определённое поле или набор полей, вы можете передать массив полей для фильтрации. Имейте в виду, что этот вариант может не поддерживаться во всех системах баз данных.
Примеры:
// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();
// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');
// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true); Параметры
-
Cake\Database\ExpressionInterface|array|string|bool$on optional Включить/выключить дизтинкт или список полей для фильтрации
-
bool$overwrite optional перезаписывать ли поля с переданным списком или нет
Возвращает
$thisenableBufferedResults() public
enableBufferedResults(bool $enable = true): $this
Включает/выключает буферизацию результатов.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам итерироваться по набору результатов несколько раз или кэшировать и итерироваться по нему.
При отключении это уменьшит использование памяти, так как извлеченные результаты не будут запоминаться для будущих итераций.
Параметры
-
bool$enable optional Включить буферизацию
Возвращает
$thisenableResultsCasting() public
enableResultsCasting(): $this
Включает преобразование результатов.
При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующие типы данных PHP.
Возвращает
$thisepilog() public
epilog(Cake\Database\ExpressionInterface|string|null $expression = null): $this
Строка или выражение, которое будет добавлено к сгенерированному запросу.
Примеры:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Содержимое epilog — это исходный SQL и не подходит для использования с данными, предоставленными пользователем.
Параметры
-
Cake\Database\ExpressionInterface|string|null$expression optional Выражение, которое будет добавлено.
Возвращает
$thisexecute() public
execute(): Cake\Database\StatementInterface
Компилирует SQL-представление этого запроса и выполняет его с использованием объекта подключение. Возвращает объект результирующего запроса.
Выполнение запроса внутри выполняет несколько шагов. Первый — это преобразование этого объекта подключением, чтобы он соответствовал конкретному диалекту. Это может привести к генерации другого объекта запроса, который фактически будет выполнен. Сразу после этого литеральные значения передаются подключению, чтобы они безопасно связались с запросом. Наконец, результирующий запрос украшается пользовательскими объектами для выполнения обратных вызовов для каждой извлеченной строки, если это необходимо.
Результат запроса является итерируемым, поэтому он может быть использован в любом цикле, как и массив.
Этот метод может быть переопределен в подклассах запросов для обработки поведения при выполнении запроса.
Возвращает
Cake\Database\StatementInterfaceexpr() public
expr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием интерфейса fluent. Также можно переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
Вы можете необязательно передать строку с исходным SQL-кодом, массив или выражения в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression optional Строка, массив или что угодно, что вы хотите обернуть в объект выражения
Возвращает
Cake\Database\Expression\QueryExpressionfrom() public
from(array|string $tables = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы в виде массива строк, массива объектов выражений, одного объекта выражения или одной строки.
Если передан массив, ключи будут использоваться для алиасирования таблиц, используя значение в качестве реального поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты запросов.
По умолчанию эта функция добавит любой переданный аргумент в список таблиц для выбора, если только второй аргумент не установлен в true.
Этот метод может быть использован для запросов SELECT, UPDATE и DELETE.
Примеры:
$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub Параметры
-
array|string$tables optional Таблицы для добавления в список. Этот аргумент может быть передан в виде массива строк, массива объектов выражений или одной строки. См. примеры выше для допустимых типов вызовов.
-
bool$overwrite optional перезаписывать ли таблицы с переданным списком или нет
Возвращает
$thisfunc() public
func(): Cake\Database\FunctionsBuilder
Возвращает экземпляр объекта-билдера функций, который можно использовать для генерации произвольных SQL-функций.
Пример:
$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02']) Возвращает
Cake\Database\FunctionsBuildergetConnection() public
getConnection(): Cake\Database\Connection
Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Возвращает
Cake\Database\ConnectiongetDefaultTypes() public
getDefaultTypes(): array<int|string, string>
Получает типы по умолчанию текущей карты типов.
Возвращает
array<int|string, string>getIterator() public
getIterator(): Cake\Database\StatementInterface
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерироваться по запросу без ручного вызова execute(), делая его похожим на набор результатов, а не сам запрос.
Возвращает
Cake\Database\StatementInterfacegetSelectTypeMap() public
getSelectTypeMap(): Cake\Database\TypeMap
Получает класс TypeMap, где хранятся типы для каждого поля в предложении SELECT.
Возвращает
Cake\Database\TypeMapgetTypeMap() public
getTypeMap(): Cake\Database\TypeMap
Возвращает существующее отображение типов.
Возвращает
Cake\Database\TypeMapgetValueBinder() public
getValueBinder(): Cake\Database\ValueBinder
Возвращает текущий используемый экземпляр ValueBinder.
ValueBinder отвечает за создание заготовок для запросов и временное связывание значений с этими заготовками, чтобы они могли быть корректно переданы в объект запроса.
Возвращает
Cake\Database\ValueBindergroup() public
group(Cake\Database\ExpressionInterface|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей, которые будут использоваться в клаузе GROUP BY для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
По умолчанию эта функция добавляет любой переданный аргумент в список группируемых полей, если второй аргумент не установлен в true.
Примеры:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Поля для группировки не подходят для использования с данными, вводимыми пользователем, так как они не проверяются на безопасность в конструкторе запроса.
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields поля, которые нужно добавить в список
-
bool$overwrite optional нужно ли перезаписать поля переданным списком или нет
Возвращает
$thishaving() public
having(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использоваться в клаузе HAVING для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы понять, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, вводимыми пользователем, так как они не проверяются на безопасность в конструкторе запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions optional Условия HAVING.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional нужно ли перезаписать условия переданным списком или нет
Возвращает
$thisСм. также
identifier() public
identifier(string $identifier): Cake\Database\ExpressionInterface
Создаёт выражение, ссылающееся на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
Значение используется как есть, и вам может потребоваться использовать псевдонимы или включать ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.
Пример
$query->newExpr()->lte('count', $query->identifier('total')); Параметры
-
string$identifier Идентификатор для выражения
Возвращает
Cake\Database\ExpressionInterfaceinnerJoin() public
innerJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array<string, string> $types = []): $this
Добавляет один INNER JOIN клаузу в запрос.
Это метод сокращения для построения объединений с помощью join().
Аргументы этого метода идентичны аргументам leftJoin() сокращения, обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
array<string, mixed>|string$table Таблица для объединения
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array<string, string>$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisinsert() public
insert(array $columns, array<int|string, string> $types = []): $this
Создаёт запрос INSERT.
Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values().
Параметры
-
array$columns Столбцы для вставки.
-
array<int|string, string>$types optional Сопоставление столбцов и их типов данных.
Возвращает
$thisИсключения
RuntimeExceptionПри наличии 0 столбцов.
into() public
into(string $table): $this
Устанавливает имя таблицы для запросов INSERT.
Параметры
-
string$table Имя таблицы для вставки.
Возвращает
$thisisBufferedResultsEnabled() public
isBufferedResultsEnabled(): bool
Возвращает, включены/выключены буферизованные результаты.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать набор результатов, или кэшировать и итерировать его.
При отключении это позволит сэкономить память, так как полученные результаты не будут запоминаться для последующих итераций.
Возвращает
boolisResultsCastingEnabled() public
isResultsCastingEnabled(): bool
Возвращает, включена/выключена обработка типов результатов.
При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующий PHP тип данных.
При отключении поля будут возвращены так, как получены из драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.
Возвращает
booljoin() public
join(array<string, mixed>|string $tables, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц, которые будут использоваться в качестве JOIN-клауз в этом запросе. Таблицы могут быть переданы как массив строк, массив, описывающий части объединения, массив с несколькими описаниями объединения или одна строка.
По умолчанию эта функция добавляет любой переданный аргумент в список таблиц для объединения, если третий аргумент не установлен в true.
Если тип объединения не указан, по умолчанию используется INNER JOIN: $query->join(['authors']) даст INNER JOIN authors ON 1 = 1
Также можно задавать псевдонимы объединений, используя ключ массива: $query->join(['a' => 'authors']) даст INNER JOIN authors a ON 1 = 1
Объединение может быть полностью описано и задано с помощью нотации массива:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id Вы даже можете указать несколько объединений в массиве, включая полное описание:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
],
'p' => [
'table' => 'publishers',
'type' => 'INNER',
'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation" Использование условий и типов
Условия могут быть выражены, как в примерах выше, с помощью строки для сравнения столбцов или строки с уже приведенными в кавычки литеральными значениями. Дополнительно можно использовать условия, выраженные в массивах или объектах выражений.
При использовании массивов для выражения условий часто желательно преобразовать литеральные значения в правильное представление базы данных. Это достигается с помощью второго параметра этой функции.
$query->join(['a' => [
'table' => 'articles',
'conditions' => [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean']) Перезапись объединений
При создании объединений с псевдонимами с помощью нотации массива, вы можете переопределить предыдущие определения объединений, используя тот же псевдоним в последующих вызовах этой функции, или вы можете заменить все ранее определённые объединения другим списком, если третий параметр этой функции установлен в true.
$query->join(['alias' => 'table']); // joins table with as alias $query->join(['alias' => 'another_table']); // joins another_table with as alias $query->join(['something' => 'different_table'], [], true); // resets joins list
Параметры
-
array<string, mixed>|string$tables список таблиц, которые должны быть объединены в запросе
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional нужно ли перезаписать объединения переданным списком или нет
Возвращает
$thisСм. также
leftJoin() public
leftJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет одну LEFT JOIN клаузу в запрос.
Это метод сокращения для построения объединений с помощью join().
Имя таблицы может быть передано как строка или как массив, если требуется псевдоним:
// LEFT JOIN authors ON authors.id = posts.author_id
$query->leftJoin('authors', 'authors.id = posts.author_id');
// LEFT JOIN authors a ON a.id = posts.author_id
$query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id'); Условия могут быть переданы как строки, массивы или объекты выражений. При использовании массивов можно комбинировать их с параметром $types для определения способа преобразования значений:
$query->leftJoin(['a' => 'articles'], [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
], ['a.posted' => 'datetime', 'a.published' => 'boolean']); См. join() для получения дополнительной информации о условиях и типах.
Параметры
-
array<string, mixed>|string$table Таблица для объединения
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thislimit() public
limit(Cake\Database\ExpressionInterface|int|null $limit): $this
Устанавливает количество записей, которые должны быть извлечены из базы данных, принимает целое число или объект выражения, результатом вычисления которого является целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$limit количество записей, которые должны быть возвращены
Возвращает
$thismodifier() public
modifier(Cake\Database\ExpressionInterface|array|string $modifiers, bool $overwrite = false): $this
Добавляет один или несколько SELECT модификаторов, которые будут использоваться в SELECT.
По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
-
Cake\Database\ExpressionInterface|array|string$modifiers модификаторы, которые должны быть применены к запросу
-
bool$overwrite optional нужно ли сбросить порядок с перечнем полей
Возвращает
$thisnewExpr() public
newExpr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта полезная функция при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования более специализированного класса QueryExpression, если это необходимо.
Вы можете необязательно передать одну строку SQL или массив или выражения в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression optional Строка, массив или что угодно, что вы хотите обернуть в объект выражения
Возвращает
Cake\Database\Expression\QueryExpressionoffset() public
offset(Cake\Database\ExpressionInterface|int|null $offset): $this
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничной навигации по большим результатам. Принимает целое число или объект выражения, значение которого равно целому числу.
В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$offset количество записей, которые нужно пропустить
Возвращает
$thisorder() public
order(Cake\Database\ExpressionInterfaceClosure|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей, которые будут использоваться в операторе ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передается массив, ключи будут использоваться в качестве самого поля, а значение будет представлять порядок, в котором это поле должно быть отсортировано. При многократном вызове с одинаковыми полями в качестве ключа последнее определение порядка будет иметь приоритет над другими.
По умолчанию эта функция добавляет любой переданный аргумент в список полей, которые должны быть выбраны, если второй аргумент не установлен в true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Производит:
ORDER BY title DESC, author_id ASC
$query
->order(['title' => $query->newExpr('DESC NULLS FIRST')])
->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
и
$query->order(function ($exp, $query) {
return [$exp->add(['id % 2 = 0']), 'title' => 'ASC'];
}); Оба станут:
ORDER BY (id %2 = 0), title ASC
Поля/направления сортировки не проверяются билдером запросов. При передаче данных, вводимых пользователем, в order(), необходимо использовать разрешенный список полей/направлений.
Если вам нужно задать сложные выражения как условия сортировки, вы должны использовать orderAsc() или orderDesc().
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$fields поля, которые должны быть добавлены в список
-
bool$overwrite optional нужно ли сбросить порядок с перечнем полей
Возвращает
$thisorderAsc() public
orderAsc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавляет оператор ORDER BY с направлением ASC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()
Поля сортировки не подходят для использования с данными, вводимыми пользователем, так как они не проверяются билдером запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite optional Необходимо ли сбрасывать операторы сортировки.
Возвращает
$thisorderDesc() public
orderDesc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавляет оператор ORDER BY с направлением DESC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()
Поля сортировки не подходят для использования с данными, вводимыми пользователем, так как они не проверяются билдером запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite optional Необходимо ли сбрасывать операторы сортировки.
Возвращает
$thispage() public
page(int $num, int|null $limit = null): $this
Установите страницу результатов, которую вы хотите получить.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit по умолчанию будет равен существующему оператору limit, а если и он пуст, то будет использоваться 25.
Страницы должны начинаться с 1.
Параметры
-
int$num Номер страницы, которую вы хотите получить.
-
int|null$limit optional Количество строк на странице. Если null, будет использоваться текущий оператор limit.
Возвращает
$thisИсключения
InvalidArgumentExceptionЕсли номер страницы < 1.
removeJoin() public
removeJoin(string $name): $this
Удаляет объединение, если оно было определено.
Полезно при повторном определении объединений или при необходимости изменить порядок операторов объединения.
Параметры
-
string$name Псевдоним/имя объединения, которое нужно удалить.
Возвращает
$thisrightJoin() public
rightJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет один RIGHT JOIN оператор объединения в запрос.
Это метод сокращенной записи для построения объединений с помощью join().
Аргументы этого метода идентичны аргументам метода leftJoin(), пожалуйста, обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
array<string, mixed>|string$table Таблица, с которой нужно объединиться
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array$types optional Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisrowCountAndClose() public
rowCountAndClose(): int
Выполняет SQL этого запроса и немедленно закрывает оператор перед возвратом количества строк, измененных в результате.
Этот метод можно использовать с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчета записей.
Пример
$rowCount = $query->update('articles')
->set(['published'=>true])
->where(['published'=>false])
->rowCountAndClose(); Приведенный выше пример изменит столбец published на true для всех записей с false, и вернет количество обновленных записей.
Возвращает
intselect() public
select(Cake\Database\ExpressionInterface|callable|array|string $fields = [], bool $overwrite = false): $this
Добавляет новые поля, которые должны быть возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передается массив, ключи будут использованы для алиасинга полей, используя значение в качестве реального поля для алиасинга. Возможен алиасинг строк, объектов Expression или даже других объектов Query.
Если передается вызываемая функция, возвращаемый массив этой функции будет использован в качестве списка полей.
По умолчанию эта функция добавляет любой переданный аргумент в список выбираемых полей, если второй аргумент не установлен в значение true.
Примеры:
$query->select(['id', 'title']); // Produces SELECT id, title
$query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
$query->select('id', true); // Resets the list: SELECT id
$query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
$query->select(function ($query) {
return ['article_id', 'total' => $query->count('*')];
}) По умолчанию поля не выбираются, если у вас есть экземпляр Cake\ORM\Query и вы пытаетесь добавить поля, вы также должны вызвать Cake\ORM\Query::enableAutoFields() для выбора стандартных полей из таблицы.
Параметры
-
Cake\Database\ExpressionInterface|callable|array|string$fields optional поля, которые нужно добавить в список.
-
bool$overwrite optional нужно ли сбросить поля переданным списком или нет
Возвращает
$thisset() public
set(Cake\Database\Expression\QueryExpressionClosure|array|string $key, mixed $value = null, array<string, string>|string $types = []): $this
Устанавливает одно или несколько полей для обновления.
Примеры
Передача строки:
$query->update('articles')->set('title', 'The Title'); Передача массива:
$query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']); Передача вызываемой функции:
$query->update('articles')->set(function ($exp) {
return $exp->eq('title', 'The title', 'string');
}); Параметры
-
Cake\Database\Expression\QueryExpressionClosure|array|string$key -
Имя столбца или массив ключей
- значения для установки. Это также может быть объект QueryExpression, содержащий фрагмент SQL. Это также может быть замыкание, которое должно возвращать объект выражения.
-
mixed$value optional Значение, на которое нужно обновить $key. Может быть null, если $key — массив или QueryExpression. Когда $key — массив, этот параметр будет использоваться как $types.
-
array<string, string>|string$types optional Типы столбцов для обработки данных.
Возвращает
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Параметры
-
Cake\Database\Connection$connection Экземпляр подключения
Возвращает
$thissetDefaultTypes() public
setDefaultTypes(array<int|string, string> $types): $this
Перезаписывает стандартные сопоставления типов для полей в реализующем объекте.
Этот метод полезен, если вам нужно установить сопоставления типов, которые используются совместно несколькими функциями/выражениями в запросе.
Чтобы добавить стандартное значение без перезаписи существующих, используйте getTypeMap()->addDefaults()
Параметры
-
array<int|string, string>$types Массив типов для установки.
Возвращает
$thisСм. также
setSelectTypeMap() public
setSelectTypeMap(Cake\Database\TypeMap $typeMap): $this
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
Параметры
-
Cake\Database\TypeMap$typeMap Объект карты для использования
Возвращает
$thissetTypeMap() public
setTypeMap(Cake\Database\TypeMap|array $typeMap): $this
Создает новую TypeMap, если $typeMap — массив, иначе меняет её на переданную.
Параметры
-
Cake\Database\TypeMap|array$typeMap Создает TypeMap, если массив, иначе устанавливает переданную TypeMap
Возвращает
$thissetValueBinder() public
setValueBinder(Cake\Database\ValueBinder|null $binder): $this
Перезаписывает текущий привязчик значений
ValueBinder отвечает за генерацию заглушек запроса и временную привязку значений к этим заглушкам, чтобы они могли быть правильно переданы объекту statement.
Параметры
-
Cake\Database\ValueBinder|null$binder Привязчик или null для отключения привязки.
Возвращает
$thissql() public
sql(Cake\Database\ValueBinder|null $binder = null): string
Возвращает SQL-представление этого объекта.
Эта функция скомпилирует этот запрос, чтобы сделать его совместимым с диалектом SQL, используемым подключением. Этот процесс может добавлять, удалять или изменять любую часть запроса или внутреннее выражение, чтобы сделать его выполнимым на целевой платформе.
Результат запроса может содержать заглушки, которые будут заменены фактическими значениями при выполнении запроса, поэтому его лучше всего использовать с подготовленными операторами.
Параметры
-
Cake\Database\ValueBinder|null$binder optional Привязчик значений, который генерирует заглушки параметров
Возвращает
stringtraverse() public
traverse(callable $callback): $this
Перебирает все указанные части. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция обычно используется как способ перебора всех частей запроса, которые будут использоваться для построения запроса.
Обратный вызов получит 2 параметра, первый — значение части запроса, по которой происходит итерация, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}); Параметры
-
callable$callback Функция или вызываемый объект, которые нужно выполнить для каждой части
Возвращает
$thistraverseExpressions() public
traverseExpressions(callable $callback): $this
Эта функция работает аналогично функции traverse(), с той разницей, что она производит полный обход всего дерева выражений. Это выполнит переданную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося внутри этого запроса на любой глубине в любой части запроса.
Обратный вызов получит в качестве первого параметра текущее посещаемое выражение.
Параметры
-
callable$callback Функция, которая будет выполняться для каждого объекта ExpressionInterface, найденного внутри этого запроса.
Возвращает
$thistraverseParts() public
traverseParts(callable $visitor, array<string> $parts): $this
Перебирает указанные части.
Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Этот метод можно использовать для обхода подмножества частей запроса для рендеринга SQL-запроса.
Обратный вызов получит 2 параметра, первый — значение части запроса, по которой происходит итерация, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
-
callable$visitor Функция или вызываемый объект, которые нужно выполнить для каждой части
-
array<string>$parts Список частей запроса для обхода
Возвращает
$thistype() public
type(): string
Возвращает тип этого запроса (select, insert, update, delete)
Возвращает
stringunion() public
union(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет весь запрос, который будет использоваться вместе с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов переданного запроса. Вы можете добавлять запросы по необходимости, вызывая этот метод несколько раз с разными запросами.
По умолчанию оператор UNION удаляет дубликаты строк. Если вы хотите включить все строки для всех запросов, используйте unionAll().
Примеры
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->union($union);
Это даст:
SELECT id, name FROM things d UNION SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полный SQL запрос, который будет использоваться в операторе UNION
-
bool$overwrite optional нужно ли сбросить список запросов для обработки или нет
Возвращает
$thisunionAll() public
unionAll(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет полное запроса для использования совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с тем, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызывая этот метод несколько раз с различными запросами.
В отличие от UNION, UNION ALL не будет удалять дубликаты строк.
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
Будет производить:
SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полный SQL запрос, используемый в операторе UNION
-
bool$overwrite optional нужно ли сбросить список запросов, которые будут обработаны, или нет
Возвращает
$thisupdate() public
update(Cake\Database\ExpressionInterface|string $table): $this
Создаёт запрос обновления.
Может быть объединён с методами set() и where(), чтобы создать запросы обновления.
Параметры
-
Cake\Database\ExpressionInterface|string$table Таблица, которую вы хотите обновить.
Возвращает
$thisvalues() public
values(Cake\Database\Expression\ValuesExpressionCake\Database\Query|array $data): $this
Устанавливает значения для запроса вставки.
Многократные вставки могут быть выполнены вызовом values() более одного раза или путём предоставления массива наборов значений. Дополнительно $data может быть экземпляром Query для вставки данных из другого SELECT-запроса.
Параметры
-
Cake\Database\Expression\ValuesExpressionCake\Database\Query|array$data Данные для вставки.
Возвращает
$thisИсключения
Cake\Database\Exception\DatabaseExceptionесли вы пытаетесь установить значения до объявления столбцов. Или если вы пытаетесь установить значения для не-запросов вставки.
where() public
where(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, используемых в операторе WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нём; значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждый элемент будет соединён со остальными условиями с помощью оператора AND. Последовательные вызовы этой функции также будут объединять новые указанные условия с использованием оператора AND. Дополнительно, значения могут быть выражены с использованием объектов выражений, которые могут включать другие объекты запросов.
Любые условия, созданные с помощью этого метода, могут быть использованы с любыми запросами типа SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример производит:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Допустимые типы могут быть взяты из отображённого с классом Database\Type.
Вложение условий с союзами:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример производит:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия, используя союзы, сколько угодно. Иногда вам может потребоваться определить два разных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Что приведёт к:
WHERE (published = false) OR (published = true)
Помните, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он будет соединять переданные условия с предыдущим сохранённым списком с использованием оператора AND. Также, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не перезапишет предыдущее значение.
Использование объектов выражений:
$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp); Предыдущий пример производит:
WHERE (id != 100 OR author_id != 1) AND published = 1
Другие объекты запросов могут быть использованы в качестве условий для любого поля.
Добавление условий поэтапно:
Вы можете использовать вызываемые функции для построения сложных выражений; функции принимают в качестве первого аргумента новый объект QueryExpression, а в качестве второго — этот экземпляр запроса. Функции должны возвращать объект выражения, который будет добавлен в список условий запроса с использованием оператора AND.
$query
->where(['title !=' => 'Hello World'])
->where(function ($exp, $query) {
$or = $exp->or(['id' => 1]);
$and = $exp->and(['id >' => 2, 'id <' => 10]);
return $or->add($and);
}); - Предыдущий пример производит:
WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))
Условия как строки:
$query->where(['articles.author_id = authors.id', 'modified IS NULL']);
Предыдущий пример производит:
WHERE articles.author_id = authors.id AND modified IS NULL
Обратите внимание, что при использовании обозначения массива или объектов выражений все значения будут правильно заключены в кавычки и преобразуются в соответствующий тип данных базы данных автоматически, тем самым защищая ваше приложение от SQL-инъекций. Однако ключи не рассматриваются как небезопасный ввод и должны быть проверены/очищены.
Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Наиболее безопасный способ — никогда не использовать строковые условия.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions optional Условия для фильтрации.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional нужно ли сбросить условия с переданным списком или нет
Возвращает
$thisСм. также
\Cake\Database\Expression\QueryExpression
whereInList() public
whereInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие IN или набор условий, используемых в операторе WHERE для этого запроса.
Этот метод позволяет использовать пустой ввод в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.
Параметры:
-
types- Ассоциативный массив имён типов, используемых для привязки значений к запросу -
allowEmpty- Разрешить пустой массив.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotInList() public
whereNotInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, используемых в операторе WHERE для этого запроса.
Этот метод позволяет использовать пустой ввод в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotInListOrNull() public
whereNotInListOrNull(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, используемых в операторе WHERE для этого запроса. Это также позволяет полю быть null с условием IS NULL, поскольку значение null заставило бы условие NOT IN всегда завершаться неудачей.
Этот метод позволяет использовать пустой ввод в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotNull() public
whereNotNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, который добавляет условие NOT NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения или список их, которые не должны быть null.
Возвращает
$thiswhereNull() public
whereNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, который добавляет условие IS NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения или список их, которые должны быть null.
Возвращает
$thiswindow() public
window(string $name, Cake\Database\Expression\WindowExpressionClosure $window, bool $overwrite = false): $this
Добавляет именованное выражение окна.
Вы отвечаете за добавление окон в том порядке, который требуется вашей базе данных.
Параметры
-
string$name Имя окна
-
Cake\Database\Expression\WindowExpressionClosure$window Выражение окна
-
bool$overwrite optional Очистить все предыдущие выражения окон запроса
Возвращает
$thiswith() public
with(Cake\Database\Expression\CommonTableExpressionClosure $cte, bool $overwrite = false): $this
Добавляет новое общее выражение с подзапросом (CTE) в запрос.
Примеры:
Общие выражения с подзапросами могут быть переданы как предварительно сконструированные объекты выражений:
$cte = new \Cake\Database\Expression\CommonTableExpression(
'cte',
$connection
->newQuery()
->select('*')
->from('articles')
);
$query->with($cte); или возвращены из замыкания, которое получит новый объект общего выражения с подзапросом в качестве первого аргумента и новый пустой объект запроса в качестве второго аргумента:
$query->with(function (
\Cake\Database\Expression\CommonTableExpression $cte,
\Cake\Database\Query $query
) {
$cteQuery = $query
->select('*')
->from('articles');
return $cte
->name('cte')
->query($cteQuery);
}); Параметры
-
Cake\Database\Expression\CommonTableExpressionClosure$cte CTE для добавления.
-
bool$overwrite optional Указывает, следует ли сбросить список CTE.
Возвращаемое значение
$thisПодробности свойств
$_connection protected
Экземпляр подключения, используемый для выполнения этого запроса.
Тип
Cake\Database\Connection$_deleteParts protected deprecated
Список положений запроса для обработки при генерации оператора DELETE.
Тип
array<string>$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
Тип
bool$_functionsBuilder protected
Экземпляр объекта генератора функций, используемого для создания произвольных SQL-функций.
Тип
Cake\Database\FunctionsBuilder|null$_insertParts protected deprecated
Список положений запроса для обработки при генерации оператора INSERT.
Тип
array<string>$_iterator protected
Объект оператора, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_parts protected
Список SQL-частей, которые будут использованы для построения этого запроса.
Тип
array<string, mixed>$_resultDecorators protected
Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при получении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.
Тип
array<callable>$_selectParts protected deprecated
Список положений запроса для обработки при генерации оператора SELECT.
Тип
array<string>$_selectTypeMap protected
Тип сопоставления для полей в операторе SELECT.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (select, insert, update, delete).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected deprecated
Список положений запроса для обработки при генерации оператора UPDATE.
Тип
array<string>$_useBufferedResults protected
Логическое значение для отслеживания включения буферизованных результатов.
Тип
bool$_valueBinder protected
Объект, отвечающий за генерацию заготовок запроса и временное хранение значений, связанных с каждой из них.
Тип
Cake\Database\ValueBinder|null$typeCastEnabled protected
Флаг отслеживания для отключения приведения типов.
Тип
bool
© 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.4/class-Cake.Database.Query.html