Класс Query
Этот класс представляет собой SQL-запрос к реляционной базе данных. Запрос может быть разных типов, таких как выборка, обновление, вставка и удаление. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в конкретный диалект SQL.
Константы
-
stringJOIN_TYPE_INNER'INNER'
-
stringJOIN_TYPE_LEFT'LEFT'
-
stringJOIN_TYPE_RIGHT'RIGHT'
Краткое описание свойств
- $_connection protected
Cake\Database\ConnectionЭкземпляр подключения, используемый для выполнения этого запроса.
- $_deleteParts protected
array<string>Список положений запроса для построения оператора DELETE.
- $_dirty protected
boolУказывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullЭкземпляр объекта-строителя функций, используемого для создания произвольных SQL-функций.
- $_insertParts protected
array<string>Список положений запроса для построения оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_parts protected
array<string, mixed>Список SQL-частей, которые будут использованы для построения этого запроса.
- $_resultDecorators protected
array<callable>Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующего оператора при извлечении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.
- $_selectParts protected
array<string>Список положений запроса для построения оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в операторе SELECT.
- $_type protected
stringТип этого запроса (выборка, вставка, обновление, удаление).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected
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-представление этого запроса и выполняет его с помощью объекта подключения, настроенного в программе. Возвращает объект полученного оператора.
-
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, так как значение 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 Включить/выключить distinct класс или список полей для фильтрации.
-
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\StatementInterfacefrom() public
from(array|string $tables = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут передаваться как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передаётся массив, ключи будут использоваться для алиасов таблиц, используя значение в качестве реального поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты Query.
По умолчанию эта функция добавляет любой переданный аргумент в список таблиц, которые должны быть выбраны, если только второй аргумент не установлен в 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<string, string>
Получает типы по умолчанию для текущей карты типов.
Возвращаемое значение
array<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<string, string> $types = []): $this
Создает запрос INSERT.
Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values().
Параметры
-
array$columns Столбцы для вставки.
-
array<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.
По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в значение 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 необязательно указать, нужно ли сбросить порядок с помощью списка полей или нет
Возвращаемое значение
$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->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression необязательно Строка, массив или что угодно, что вы хотите обернуть в объект выражения
Возвращаемое значение
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 необязательно указать, нужно ли сбросить порядок с помощью списка полей или нет
Возвращаемое значение
$thisorderAsc() public
orderAsc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавить условие ORDER BY с направлением ASC.
Этот метод позволяет задавать сложные выражения как условия сортировки в отличие от order().
Поля сортировки не подходят для использования с данными, введенными пользователем, так как они не проверяются генератором запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Сбросить ли условия сортировки.
Возвращаемое значение
$thisorderDesc() public
orderDesc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавить условие ORDER BY с направлением DESC.
Этот метод позволяет задавать сложные выражения как условия сортировки в отличие от order().
Поля сортировки не подходят для использования с данными, введенными пользователем, так как они не проверяются генератором запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Сбросить ли условия сортировки.
Возвращаемое значение
$thispage() public
page(int $num, int|null $limit = null): $this
Устанавливает страницу результатов, которую вы хотите.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить как результаты. Если пусто, limit будет по умолчанию равен существующему значению limit, а если и оно пустое, то 25 будет использоваться.
Номера страниц должны начинаться с 1.
Параметры
-
int$num Номер страницы, которую вы хотите.
-
int|null$limit необязательно Количество строк на странице. Если 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 необязательно Условия для объединения.
-
array$types необязательно Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращаемое значение
$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 необязательно поля, которые нужно добавить в список.
-
bool$overwrite необязательно указать, нужно ли сбросить поля с переданным списком или нет
Возвращаемое значение
$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. Также может быть замыканием (Closure), которое должно возвращать объект выражения.
-
mixed$value необязательно Значение, на которое нужно обновить $key. Может быть null, если $key — массив или QueryExpression. Если $key — массив, этот параметр будет использоваться как $types.
-
array<string, string>|string$types необязательно Типы столбцов для обработки данных.
Возвращает
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования данного запроса.
Параметры
-
Cake\Database\Connection$connection Экземпляр соединения
Возвращает
$thissetDefaultTypes() public
setDefaultTypes(array<string, string> $types): $this
Переопределяет сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно установить сопоставления типов, которые используются в нескольких функциях/выражениях в запросе.
Чтобы добавить тип по умолчанию без переопределения существующих, используйте getTypeMap()->addDefaults()
Параметры
-
array<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 отвечает за создание плейсхолдеров запроса и временное связывание значений с этими плейсхолдерами, чтобы они могли быть корректно переданы объекту оператора.
Параметры
-
Cake\Database\ValueBinder|null$binder Связывающий элемент или null для отключения связывания.
Возвращает
$thissql() public
sql(Cake\Database\ValueBinder|null $binder = null): string
Возвращает SQL-представление этого объекта.
Эта функция скомпилирует данный запрос, чтобы сделать его совместимым с диалектом SQL, используемым соединением. Этот процесс может добавить, удалить или изменить любую часть запроса или внутреннее выражение, чтобы сделать его исполняемым на целевой платформе.
Полученный запрос может содержать плейсхолдеры, которые будут заменены фактическими значениями при выполнении запроса, поэтому его лучше всего использовать с подготовленными операторами.
Параметры
-
Cake\Database\ValueBinder|null$binder необязательно Value binder, генерирующий плейсхолдеры параметров
Возвращает
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 необязательно нужно ли сбросить список запросов для обработки или нет
Возвращает
$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 необязательно нужно ли сбросить список запросов для обработки или нет
Возвращает
$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')
Вы можете вкладывать условия с помощью союзов, сколько захотите. Иногда вам может потребоваться определить 2 различных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$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
Список пунктов запроса, просматриваемых для генерации оператора DELETE.
Тип
array<string>$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
Тип
bool$_functionsBuilder protected
Экземпляр объекта-строителя функций, используемого для генерации произвольных SQL функций.
Тип
Cake\Database\FunctionsBuilder|null$_insertParts protected
Список пунктов запроса, просматриваемых для генерации оператора INSERT.
Тип
array<string>$_iterator protected
Объект оператора, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_parts protected
Список SQL-элементов, которые будут использованы для построения этого запроса.
Тип
array<string, mixed>$_resultDecorators protected
Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующего оператора при извлечении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.
Тип
array<callable>$_selectParts protected
Список пунктов запроса, просматриваемых для генерации оператора SELECT.
Тип
array<string>$_selectTypeMap protected
Карта типов для полей в выборке.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (select, insert, update, delete).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected
Список пунктов запроса, просматриваемых для генерации оператора 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.3/class-Cake.Database.Query.html