Класс 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
string[]Список пунктов запроса для генерации оператора DELETE.
- $_dirty protected
boolУказывает, было ли изменено внутреннее состояние запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullЭкземпляр объекта-строителя функций, используемого для генерации произвольных SQL-функций.
- $_insertParts protected
string[]Список пунктов запроса для генерации оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_parts protected
arrayСписок SQL-частей, которые будут использоваться для построения этого запроса.
- $_resultDecorators protected
callable[]Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при извлечении. Каждая функция обратного вызова будет получать массив строк в качестве первого аргумента.
- $_selectParts protected
string[]Список пунктов запроса для генерации оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в операторе select.
- $_type protected
stringТип этого запроса (select, insert, update, delete).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected
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 для данного запроса.
-
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
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
array__toString() public
__toString(): string
Возвращает строковое представление этого запроса (полное SQL-выражение).
Возвращает
string_conjugate() protected
_conjugate(string $part, string|arrayCake\Database\ExpressionInterfaceClosure|null $append, string $conjunction, array $types): void
Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.
Параметры
-
string$part Имя части запроса, к которой нужно добавить новую часть
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$append Выражение или функция-обработчик для добавления. для добавления.
-
string$conjunction Тип конъюнкции, используемой для обработки части
-
array$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\ExpressionInterfaceCake\Database\ExpressionInterface[] $expression, Closure $callback): void
Метод обхода частей запроса, используемый traverseExpressions()
Параметры
-
Cake\Database\ExpressionInterfaceCake\Database\ExpressionInterface[]$expression Выражение запроса или массив выражений.
-
Closure$callback Обратный вызов, который будет выполнен для каждого найденного объекта ExpressionInterface внутри этого запроса.
Возвращает
void_makeJoin() protected
_makeJoin(string|string[] $table, string|arrayCake\Database\ExpressionInterface $conditions, string $type): array
Возвращает массив, который может быть передан методу join, описывая отдельную условную часть объединения.
Параметры
-
string|string[]$table Таблица, с которой нужно выполнить объединение
-
string|arrayCake\Database\ExpressionInterface$conditions Условия, используемые для объединения.
-
string$type тип объединения для использования
Возвращает
arrayandHaving() public
andHaving(string|arrayCake\Database\ExpressionInterfaceClosure $conditions, array $types = []): $this
Подключает любой ранее определённый набор условий к предоставленному списку, используя оператор AND в условии HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не очищаются билдером запроса.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure$conditions Условия AND для HAVING.
-
array$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
Возвращает
$thisСм. также
andWhere() public
andWhere(string|arrayCake\Database\ExpressionInterfaceClosure $conditions, array $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)
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure$conditions Условия, которые нужно добавить с AND.
-
array$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: булево
- 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(arrayCake\Database\ExpressionInterface|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); Параметры
-
arrayCake\Database\ExpressionInterface|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(stringCake\Database\ExpressionInterface|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'); Содержание эпилога — это сырой SQL и не подходит для использования с данными, введёнными пользователем.
Параметры
-
stringCake\Database\ExpressionInterface|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
Получает типы по умолчанию для текущей карты типов.
Возвращает
arraygetIterator() 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(arrayCake\Database\ExpressionInterface|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'); Поля группировки не подходят для использования с данными, предоставленными пользователем, так как они не очищаются построителем запросов.
Параметры
-
arrayCake\Database\ExpressionInterface|string$fields поля, которые нужно добавить в список
-
bool$overwrite optional необходимо ли перезаписать поля переданным списком или нет
Возвращает
$thishaving() public
having(string|arrayCake\Database\ExpressionInterfaceClosure|null $conditions = null, array $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий для использования в предложении HAVING для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не очищаются построителем запросов.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$conditions optional Условия HAVING.
-
array$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(string|array $table, string|arrayCake\Database\ExpressionInterface $conditions = [], array $types = []): $this
Добавляет одно предложение INNER JOIN в запрос.
Это сокращенный метод для построения соединений через join().
Аргументы этого метода идентичны сокращенному варианту leftJoin(), обратитесь к описанию этого метода для получения более подробной информации.
Параметры
-
string|array$table Таблица, к которой нужно присоединиться
-
string|arrayCake\Database\ExpressionInterface$conditions optional Условия, которые нужно использовать для соединения.
-
array$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisinsert() public
insert(array $columns, string[] $types = []): $this
Создает запрос на вставку.
Обратите внимание, что вызов этого метода сбросит любые данные, ранее установленные с помощью Query::values().
Параметры
-
array$columns Столбцы для вставки.
-
string[]$types optional Сопоставление между столбцами и их типами данных.
Возвращает
$thisВызывает исключение
RuntimeExceptionКогда количество столбцов равно 0.
into() public
into(string $table): $this
Устанавливает имя таблицы для запросов на вставку.
Параметры
-
string$table Имя таблицы для вставки.
Возвращает
$thisisBufferedResultsEnabled() public
isBufferedResultsEnabled(): bool
Возвращает, включены ли буферизованные результаты или нет.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать набор результатов или кэшировать и итерировать его.
При отключении он будет потреблять меньше памяти, поскольку извлеченные результаты не запоминаются для будущих итераций.
Возвращает
boolisResultsCastingEnabled() public
isResultsCastingEnabled(): bool
Возвращает, включено ли приведение типов результатов или нет.
При включении поля в результатах, возвращаемых этим запросом, будут приведены к соответствующему типу данных PHP.
При отключении поля будут возвращены такими, какими они были получены от драйвера базы данных (что в большинстве сред означает, что они возвращаются как строки), что может повысить производительность при работе с большими наборами данных.
Возвращает
booljoin() public
join(array|string $tables, array $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$tables список таблиц, которые должны быть объединены в запросе
-
array$types optional ассоциативный массив имен типов, используемых для привязки значений к запросу
-
bool$overwrite optional необходимо ли перезаписать соединения переданным списком или нет
Возвращает
$thisСм. также
leftJoin() public
leftJoin(string|string[] $table, string|arrayCake\Database\ExpressionInterface $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() для получения более подробной информации об условиях и типах.
Параметры
-
string|string[]$table Таблица, к которой нужно присоединиться
-
string|arrayCake\Database\ExpressionInterface$conditions optional Условия, которые нужно использовать для соединения.
-
array$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thislimit() public
limit(intCake\Database\ExpressionInterface|null $num): $this
Задает количество записей, которые должны быть извлечены из базы данных, принимает целое число или объект выражения, который вычисляется как целое число. В некоторых базах данных эта операция может не поддерживаться, или запрос потребуется преобразовать, чтобы ограничить размер результирующего набора.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
-
intCake\Database\ExpressionInterface|null$num количество записей, которые должны быть возвращены
Возвращает
$thismodifier() public
modifier(arrayCake\Database\ExpressionInterface|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 Параметры
-
arrayCake\Database\ExpressionInterface|string$modifiers модификаторы, которые должны быть применены к запросу
-
bool$overwrite необязательный нужно ли сбросить порядок с помощью списка полей или нет
Возвращаемое значение
$thisnewExpr() public
newExpr(string|arrayCake\Database\ExpressionInterface|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием флюент-интерфейса. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс 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 Параметры
-
string|arrayCake\Database\ExpressionInterface|null$rawExpression необязательный Строка, массив или что угодно, что вы хотите обернуть в объект выражения
Возвращаемое значение
Cake\Database\Expression\QueryExpressionoffset() public
offset(intCake\Database\ExpressionInterface|null $num): $this
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничной выдачи больших результатов. Принимает целое число или объект выражения, вычисляющий целое число.
В некоторых базах данных эта операция может быть не поддерживается или потребуется преобразовать запрос, чтобы ограничить размер набора результатов.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
-
intCake\Database\ExpressionInterface|null$num количество записей, которые нужно пропустить
Возвращаемое значение
$thisorder() public
order(arrayCake\Database\ExpressionInterfaceClosure|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().
Параметры
-
arrayCake\Database\ExpressionInterfaceClosure|string$fields поля, которые должны быть добавлены в список
-
bool$overwrite необязательный нужно ли сбросить порядок с помощью списка полей или нет
Возвращаемое значение
$thisorderAsc() public
orderAsc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this
Добавляет предложение ORDER BY с направлением ASC.
Этот метод позволяет вам устанавливать сложные выражения в качестве условий сортировки в отличие от order()
Поля сортировки не подходят для использования с данными, введенными пользователем, так как они не очищаются билдером запросов.
Параметры
-
stringCake\Database\Expression\QueryExpressionClosure$field Поле, по которому нужно отсортировать.
-
bool$overwrite необязательный Нужно ли сбрасывать предложения сортировки.
Возвращаемое значение
$thisorderDesc() public
orderDesc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this
Добавляет предложение ORDER BY с направлением DESC.
Этот метод позволяет вам устанавливать сложные выражения в качестве условий сортировки в отличие от order()
Поля сортировки не подходят для использования с данными, введенными пользователем, так как они не очищаются билдером запросов.
Параметры
-
stringCake\Database\Expression\QueryExpressionClosure$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(string|string[] $table, string|arrayCake\Database\ExpressionInterface $conditions = [], array $types = []): $this
Добавляет одно предложение JOIN к запросу.
Это метод сокращенного написания для построения соединений через join().
Аргументы этого метода идентичны аргументам leftJoin(), пожалуйста, обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
string|string[]$table Таблица, с которой нужно выполнить соединение
-
string|arrayCake\Database\ExpressionInterface$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(arrayCake\Database\ExpressionInterface|string|callable $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() для выбора стандартных полей из таблицы.
Параметры
-
arrayCake\Database\ExpressionInterface|string|callable$fields необязательный поля, которые нужно добавить в список.
-
bool$overwrite необязательный нужно ли сбросить поля с переданным списком или нет
Возвращаемое значение
$thisset() public
set(string|arrayClosureCake\Database\Expression\QueryExpression $key, mixed $value = null, array|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');
}); Параметры
-
string|arrayClosureCake\Database\Expression\QueryExpression$key -
Имя столбца или массив ключей
- значений для установки. Также может быть объектом QueryExpression, содержащим фрагмент SQL. Также может быть замыканием (Closure), которое должно возвращать объект выражения.
-
mixed$value необязательно Значение, на которое нужно обновить $key. Может быть null, если $key — массив или QueryExpression. Если $key — массив, этот параметр будет использоваться как $types.
-
array|string$types необязательно Типы столбцов для обработки данных.
Возвращает
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования данного запроса.
Параметры
-
Cake\Database\Connection$connection Экземпляр соединения
Возвращает
$thissetDefaultTypes() public
setDefaultTypes(array $types): $this
Переопределяет сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно установить сопоставления типов, которые используются в нескольких функциях/выражениях в запросе.
Чтобы добавить тип по умолчанию без переопределения существующих, используйте getTypeMap()->addDefaults()
Параметры
-
array$types Массив типов для установки.
Возвращает
$thisСм. также
setSelectTypeMap() public
setSelectTypeMap(Cake\Database\TypeMap $typeMap): $this
Устанавливает класс TypeMap, в котором хранятся типы для каждого поля в запросе select.
Параметры
-
Cake\Database\TypeMap$typeMap Объект карты для использования
Возвращает
$thissetTypeMap() public
setTypeMap(arrayCake\Database\TypeMap $typeMap): $this
Создает новый TypeMap, если $typeMap — массив, иначе меняет его на указанный.
Параметры
-
arrayCake\Database\TypeMap$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, string[] $parts): $this
Пройдёт по указанным частям.
Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Этот метод может использоваться для обхода подмножества частей запроса для отображения SQL-запроса.
Обратный вызов получит 2 параметра: первое — значение части запроса, по которой происходит итерация, а второе — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
-
callable$visitor Функция или вызываемый объект, который будет выполняться для каждой части
-
string[]$parts Список частей запроса, по которым необходимо произвести обход
Возвращает
$thistype() public
type(): string
Возвращает тип этого запроса (select, insert, update, delete)
Возвращает
stringunion() public
union(stringCake\Database\Query $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
Параметры
-
stringCake\Database\Query$query полный SQL-запрос для использования в операторе UNION
-
bool$overwrite необязательно нужно ли сбросить список запросов для обработки или нет
Возвращает
$thisunionAll() public
unionAll(stringCake\Database\Query $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
Параметры
-
stringCake\Database\Query$query полный SQL-запрос для использования в операторе UNION
-
bool$overwrite необязательно нужно ли сбросить список запросов для обработки или нет
Возвращает
$thisupdate() public
update(stringCake\Database\ExpressionInterface $table): $this
Создать запрос обновления.
Может быть использован совместно с методами set() и where() для создания запросов обновления.
Параметры
-
stringCake\Database\ExpressionInterface$table Таблица, которую нужно обновить.
Возвращает
$thisvalues() public
values(arrayCake\Database\QueryCake\Database\Expression\ValuesExpression $data): $this
Установите значения для запроса вставки.
Многократные вставки могут быть выполнены, вызывая values() более одного раза или передавая массив наборов значений. Кроме того, $data может быть экземпляром Query для вставки данных из другого запроса SELECT.
Параметры
-
arrayCake\Database\QueryCake\Database\Expression\ValuesExpression$data Данные для вставки.
Возвращает
$thisВыбрасывает
Cake\Database\Exception\DatabaseExceptionесли вы пытаетесь установить значения до объявления столбцов. Или если вы пытаетесь установить значения для запросов, не являющихся запросами вставки.
where() public
where(string|arrayCake\Database\ExpressionInterfaceClosure|null $conditions = null, array $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
Другие объекты Query могут быть использованы как условия для любого поля.
Добавление условий поэтапно:
Вы можете использовать вызываемые функции для построения сложных выражений. Функции принимают в качестве первого аргумента новый объект 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-инъекций. Однако ключи не обрабатываются как небезопасный ввод и должны быть проверены/очищены.
Если вы используете строковые условия, убедитесь, что ваши значения правильно процитированы. Самый безопасный способ — никогда не использовать строковые условия.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$conditions optional Условия для фильтрации.
-
array$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional Нужно ли сбросить условия переданным списком или нет
Возвращает
$thisСм. также
\Cake\Database\Expression\QueryExpression
whereInList() public
whereInList(string $field, array $values, array $options = []): $this
Добавляет условие IN или набор условий, которые будут использованы в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.
Параметры:
-
types- Ассоциативный массив имён типов, используемых для привязки значений к запросу -
allowEmpty- Разрешить пустой массив.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array$options optional Параметры
Возвращает
$thiswhereNotInList() public
whereNotInList(string $field, array $values, array $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использованы в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array$options optional Параметры
Возвращает
$thiswhereNotNull() public
whereNotNull(array|stringCake\Database\ExpressionInterface $fields): $this
Удобный метод, который добавляет условие NOT NULL в запрос
Параметры
-
array|stringCake\Database\ExpressionInterface$fields Одно поле или выражения или список из них, которые не должны быть NULL.
Возвращает
$thiswhereNull() public
whereNull(array|stringCake\Database\ExpressionInterface $fields): $this
Удобный метод, который добавляет условие IS NULL в запрос
Параметры
-
array|stringCake\Database\ExpressionInterface$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(ClosureCake\Database\Expression\CommonTableExpression $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);
}); Параметры
-
ClosureCake\Database\Expression\CommonTableExpression$cte CTE для добавления.
-
bool$overwrite optional Установить ли список CTE в первоначальное состояние.
Возвращает
$thisПодробности свойства
$_connection protected
Экземпляр соединения, который будет использоваться для выполнения этого запроса.
Тип
Cake\Database\Connection$_deleteParts protected
Список положений запроса для прохождения и генерации оператора DELETE.
Тип
string[]$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для удаления внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненное утверждение.
Тип
bool$_functionsBuilder protected
Экземпляр объекта-строителя функций, используемого для генерации произвольных функций SQL.
Тип
Cake\Database\FunctionsBuilder|null$_insertParts protected
Список положений запроса для прохождения и генерации оператора INSERT.
Тип
string[]$_iterator protected
Объект утверждения, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_parts protected
Список частей SQL, которые будут использоваться для построения этого запроса.
Тип
array$_resultDecorators protected
Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего утверждения при получении. Каждая функция обратного вызова будет получать массив строк в качестве первого аргумента.
Тип
callable[]$_selectParts protected
Список положений запроса для прохождения и генерации оператора SELECT.
Тип
string[]$_selectTypeMap protected
Карта типов для полей в предложении select.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (select, insert, update, delete).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected
Список положений запроса для прохождения и генерации оператора UPDATE.
Тип
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.2/class-Cake.Database.Query.html