Spec-Zone.ru › CakePHP 4.4

Класс Query

Этот класс представляет SQL-запрос к реляционной базе данных. Запрос может быть разных типов, таких как select, update, insert и delete. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в определённый диалект SQL.

Пространство имён: Cake\Database

Константы

  • string
    JOIN_TYPE_INNER
    'INNER'
  • string
    JOIN_TYPE_LEFT
    'LEFT'
  • string
    JOIN_TYPE_RIGHT
    'RIGHT'

Краткое описание свойств

  • $_connection protected
    Cake\Database\Connection

    Экземпляр подключения, используемый для выполнения этого запроса.

  • $_deleteParts protected deprecated
    array<string>

    Список частей запроса для генерации оператора DELETE.

  • $_dirty protected
    bool

    Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.

  • $_functionsBuilder protected
    Cake\Database\FunctionsBuilder|null

    Экземпляр объекта-генератора функций, используемого для генерации произвольных SQL-функций.

  • $_insertParts protected deprecated
    array<string>

    Список частей запроса для генерации оператора INSERT.

  • $_iterator protected
    Cake\Database\StatementInterface|null

    Объект оператора, полученный в результате выполнения этого запроса.

  • $_parts protected
    array<string, mixed>

    Список SQL-частей, которые будут использоваться для построения этого запроса.

  • $_resultDecorators protected
    array<callable>

    Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при получении. Каждая из функций обратного вызова будет получать массив строк в качестве первого аргумента.

  • $_selectParts protected deprecated
    array<string>

    Список частей запроса для генерации оператора SELECT.

  • $_selectTypeMap protected
    Cake\Database\TypeMap|null

    Карта типов для полей в операторе SELECT.

  • $_type protected
    string

    Тип этого запроса (select, insert, update, delete).

  • $_typeMap protected
    Cake\Database\TypeMap|null
  • $_updateParts protected deprecated
    array<string>

    Список частей запроса для генерации оператора UPDATE.

  • $_useBufferedResults protected
    bool

    Булево значение для отслеживания включения буферизованных результатов.

  • $_valueBinder protected
    Cake\Database\ValueBinder|null

    Объект, ответственный за генерацию заполнитель запросов и временное хранение значений, связанных с каждым из них.

  • $typeCastEnabled protected
    bool

    Флаг отслеживания для отключения приведения типов.

Краткое описание методов

  • __clone() public

    Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.

  • __construct() public

    Конструктор.

  • __debugInfo() public

    Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.

  • __toString() public

    Возвращает строковое представление этого запроса (полное SQL-утверждение).

  • _conjugate() protected

    Вспомогательная функция, используемая для построения условий путём объединения объектов QueryExpression.

  • _decorateStatement() protected

    Вспомогательная функция, используемая для обертывания исходного утверждения из драйвера любыми зарегистрированными обратными вызовами.

  • _dirty() protected

    Помечает запрос как изменённый, удаляя любую предварительно обработанную информацию из кэша в памяти.

  • _expressionsVisitor() protected

    Метод обхода частей запроса, используемый методом traverseExpressions()

  • _makeJoin() protected

    Возвращает массив, который может быть передан методу join, описывающему одно условие объединения.

  • andHaving() public

    Подключает любой ранее определённый набор условий к предоставленному списку с использованием оператора AND в предложении HAVING. Этот метод работает точно так же, как и метод andWhere(). Обратитесь к документации этого метода для получения информации о том, как использовать каждый параметр.

  • andWhere() public

    Подключает любой ранее определённый набор условий к предоставленному списку с использованием оператора AND. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.

  • bind() public

    Связывает заполнитель запроса со значением и типом.

  • clause() public

    Возвращает данные, которые были сохранены в указанном предложении. Это полезно для изменения любой внутренней части запроса, и его используют диалекты SQL для преобразования запроса соответствующим образом перед выполнением. Допустимые предложения, которые можно получить: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.

  • decorateResults() public

    Регистрирует обратный вызов, который выполняется для каждого результата, извлечённого из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с необработанными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с возможными изменениями.

  • delete() public

    Создать запрос на удаление.

  • disableBufferedResults() public

    Отключает буферизацию результатов.

  • disableResultsCasting() public

    Отключает приведение типов результатов.

  • distinct() public

    Добавляет предложение DISTINCT в запрос для удаления дубликатов из набора результатов. Это предложение может быть использовано только для запросов select.

  • enableBufferedResults() public

    Включает/Отключает буферизацию результатов.

  • enableResultsCasting() public

    Включает приведение типов результатов.

  • epilog() public

    Строка или выражение, которое будет добавлено к сгенерированному запросу

  • execute() public

    Компилирует SQL-представление этого запроса и выполняет его с использованием объекта подключения, настроенного в программе. Возвращает объект результирующего утверждения.

  • expr() public

    Возвращает новый объект QueryExpression. Это удобная функция при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования более специализированного класса QueryExpression, если это необходимо.

  • from() public

    Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • func() public

    Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных SQL-функций.

  • getConnection() public

    Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.

  • getDefaultTypes() public

    Получает типы по умолчанию для текущей карты типов.

  • getIterator() public

    Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать по запросу без необходимости вызывать execute() вручную, что делает запрос похожим на набор результатов, а не на сам запрос.

  • getSelectTypeMap() public

    Получает класс TypeMap, где хранятся типы для каждого поля в предложении select.

  • getTypeMap() public

    Возвращает существующую карту типов.

  • getValueBinder() public

    Возвращает текущий используемый экземпляр ValueBinder.

  • group() public

    Добавляет одно или несколько полей, которые будут использоваться в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • having() public

    Добавляет условие или набор условий, которые будут использоваться в предложении HAVING для этого запроса. Этот метод работает точно так же, как и метод where(). Обратитесь к документации этого метода для получения информации о том, как использовать каждый параметр.

  • identifier() public

    Создаёт выражение, которое ссылается на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.

  • innerJoin() public

    Добавляет одно INNER JOIN условие в запрос.

  • insert() public

    Создать запрос на вставку.

  • into() public

    Установить имя таблицы для запросов вставки.

  • isBufferedResultsEnabled() public

    Возвращает, включена ли/выключена ли буферизация результатов.

  • isResultsCastingEnabled() public

    Возвращает, включено ли/выключено ли приведение типов результатов.

END_OF_DOCUMENT_MARKER
  • join() public

    Добавляет одну или несколько таблиц для использования в качестве условий JOIN в этом запросе. Таблицы могут быть переданы в виде массива строк, массива, описывающего части соединения, массива с несколькими описаниями соединений или одной строкой.

  • leftJoin() public

    Добавляет условие LEFT JOIN в запрос.

  • limit() public

    Устанавливает количество записей, которое должно быть извлечено из базы данных, принимает целое число или объект выражения, результатом оценки которого является целое число. В некоторых базах данных эта операция может быть не поддерживаемой или потребует преобразования запроса для ограничения размера набора результатов.

  • modifier() public

    Добавляет один или несколько модификаторов SELECT для использования в SELECT.

  • newExpr() public

    Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с помощью интерфейса fluent. Также можно переопределить эту функцию в подклассах для использования специализированного класса QueryExpression, если это необходимо.

  • offset() public

    Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Часто используется для постраничной навигации по большим результатам. Принимает целое число или объект выражения, результатом оценки которого является целое число.

  • order() public

    Добавляет одно или несколько полей для использования в операторе ORDER для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки.

  • orderAsc() public

    Добавляет оператор ORDER BY со значением ASC.

  • orderDesc() public

    Добавляет оператор ORDER BY со значением DESC.

  • page() public

    Устанавливает страницу результатов, которую вы хотите получить.

  • removeJoin() public

    Удаляет соединение, если оно было определено.

  • rightJoin() public

    Добавляет условие RIGHT JOIN в запрос.

  • rowCountAndClose() public

    Выполняет SQL-запрос этого объекта и немедленно закрывает оператор перед возвратом количества измененных строк.

  • select() public

    Добавляет новые поля, которые должны быть возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки.

  • set() public

    Устанавливает одно или несколько полей для обновления.

  • setConnection() public

    Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования этого запроса.

  • setDefaultTypes() public

    Переопределяет соответствия типов по умолчанию для полей в реализуемом объекте.

  • setSelectTypeMap() public

    Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.

  • setTypeMap() public

    Создаёт новый TypeMap, если $typeMap является массивом, в противном случае меняет его на заданный.

  • setValueBinder() public

    Переопределяет текущий связыватель значений

  • sql() public

    Возвращает SQL-представление этого объекта.

  • traverse() public

    Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты с помощью переменных в замыкании или переменных экземпляра. Эта функция обычно используется для обхода всех частей запроса, которые будут использоваться для построения запроса.

  • traverseExpressions() public

    Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход всего дерева выражений. Она выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося в этом запросе на любой глубине вложения в любой части запроса.

  • traverseParts() public

    Переберёт предоставленные части.

  • type() public

    Возвращает тип этого запроса (select, insert, update, delete)

  • union() public

    Добавляет завершённый запрос для использования совместно с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с результатом запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько нужно, вызвав этот метод несколько раз с разными запросами.

  • unionAll() public

    Добавляет завершённый запрос для использования совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с результатом запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько нужно, вызвав этот метод несколько раз с разными запросами.

  • update() public

    Создаёт запрос на обновление.

  • values() public

    Устанавливает значения для запроса вставки.

  • where() public

    Добавляет условие или набор условий для использования в операторе WHERE для этого запроса. Условия могут быть выражены в виде массива полей в качестве ключей с операторами сравнения в нём, значения массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.

  • whereInList() public

    Добавляет условие IN или набор условий для использования в операторе WHERE для этого запроса.

  • whereNotInList() public

    Добавляет условие NOT IN или набор условий для использования в операторе WHERE для этого запроса.

  • whereNotInListOrNull() public

    Добавляет условие NOT IN или набор условий для использования в операторе WHERE для этого запроса. Это также позволяет полю быть пустым с помощью условия IS NULL, так как нулевое значение приведет к тому, что условие NOT IN всегда будет выполняться.

  • whereNotNull() public

    Удобный метод, который добавляет условие NOT NULL в запрос.

  • whereNull() public

    Удобный метод, который добавляет условие IS NULL в запрос.

  • window() public

    Добавляет именованное окно выражения.

  • with() public

    Добавляет новое выражение общего вида (CTE) в запрос.

Подробное описание методов

__clone() public

__clone(): void

Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.

Возвращает

void

__construct() public

__construct(Cake\Database\Connection $connection)

Конструктор.

Параметры

Cake\Database\Connection $connection

Объект подключения, используемый для преобразования и выполнения этого запроса

__debugInfo() public

__debugInfo(): array<string, mixed>

Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.

Возвращает

array<string, mixed>

__toString() public

__toString(): string

Возвращает строковое представление этого запроса (полное SQL-утверждение).

Возвращает

string

_conjugate() protected

_conjugate(string $part, Cake\Database\ExpressionInterfaceClosure|array|string|null $append, string $conjunction, array<string, string> $types): void

Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.

Параметры

string $part

Имя части запроса, к которой следует добавить новую часть

Cake\Database\ExpressionInterfaceClosure|array|string|null $append

Выражение или функция-построитель, которую нужно добавить. для добавления.

string $conjunction

тип конъюнкции, который нужно использовать для обработки части

array<string, string> $types

Ассоциативный массив имён типов, используемых для привязки значений к запросу

Возвращает

void

_decorateStatement() protected

_decorateStatement(Cake\Database\StatementInterface $statement): Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface

Вспомогательная функция, используемая для обертывания исходного утверждения из драйвера любыми зарегистрированными обратными вызовами.

Параметры

Cake\Database\StatementInterface $statement

который нужно украсить

Возвращает

Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface

_dirty() protected

_dirty(): void

Помечает запрос как изменённый, удаляя любую предварительно обработанную информацию из кэширования в памяти.

Возвращает

void

_expressionsVisitor() protected

_expressionsVisitor(Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface> $expression, Closure $callback): void

Метод обхода частей запроса, используемый traverseExpressions()

Параметры

Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface> $expression

Выражение запроса или массив выражений.

Closure $callback

Обратный вызов, который будет выполнен для каждого ExpressionInterface, найденного в этом запросе.

Возвращает

void

_makeJoin() protected

_makeJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions, string $type): array

Возвращает массив, который можно передать методу join, описывающий одну строку объединения

Параметры

array<string, mixed>|string $table

Таблица, с которой нужно объединить

Cake\Database\ExpressionInterface|array|string $conditions

Условие для объединения.

string $type

тип объединения для использования

Возвращает

array

andHaving() 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

См. также

\Cake\Database\Query::andWhere()

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\Query::where()
\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

имя сопоставленного типа, используемое для преобразования при отправке в базу данных

Возвращает

$this

clause() 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

Указывает, следует ли добавить или заменить все существующие декораторы.

Возвращает

$this

delete() public

delete(string|null $table = null): $this

Создает запрос на удаление.

Может быть объединен с методами from(), where() и другими для создания запросов на удаление со специфическими условиями.

Параметры

string|null $table optional

Таблица, которая будет использоваться при удалении.

Возвращает

$this

disableBufferedResults() public

disableBufferedResults(): $this

Отключает буферизацию результатов.

Отключение буферизации уменьшит использование памяти, так как извлеченные результаты не будут запоминаться для будущих итераций.

Возвращает

$this

disableResultsCasting() public

disableResultsCasting(): $this

Отключает преобразование результатов.

При отключении поля будут возвращаться так, как они получены из драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.

Возвращает

$this

distinct() public

distinct(Cake\Database\ExpressionInterface|array|string|bool $on = [], bool $overwrite = false): $this

Добавляет DISTINCT оператор к запросу, чтобы удалить дубликаты из набора результатов. Этот оператор может быть использован только для запросов SELECT.

Если вам нужно отфильтровать дубликаты на основе строк, которые содержат определённое поле или набор полей, вы можете передать массив полей для фильтрации. Имейте в виду, что этот вариант может не поддерживаться во всех системах баз данных.

Примеры:

// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();

// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');

// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true);

Параметры

Cake\Database\ExpressionInterface|array|string|bool $on optional

Включить/выключить дизтинкт или список полей для фильтрации

bool $overwrite optional

перезаписывать ли поля с переданным списком или нет

Возвращает

$this

enableBufferedResults() public

enableBufferedResults(bool $enable = true): $this

Включает/выключает буферизацию результатов.

При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам итерироваться по набору результатов несколько раз или кэшировать и итерироваться по нему.

При отключении это уменьшит использование памяти, так как извлеченные результаты не будут запоминаться для будущих итераций.

Параметры

bool $enable optional

Включить буферизацию

Возвращает

$this

enableResultsCasting() public

enableResultsCasting(): $this

Включает преобразование результатов.

При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующие типы данных PHP.

Возвращает

$this

epilog() 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

Выражение, которое будет добавлено.

Возвращает

$this

execute() public

execute(): Cake\Database\StatementInterface

Компилирует SQL-представление этого запроса и выполняет его с использованием объекта подключение. Возвращает объект результирующего запроса.

Выполнение запроса внутри выполняет несколько шагов. Первый — это преобразование этого объекта подключением, чтобы он соответствовал конкретному диалекту. Это может привести к генерации другого объекта запроса, который фактически будет выполнен. Сразу после этого литеральные значения передаются подключению, чтобы они безопасно связались с запросом. Наконец, результирующий запрос украшается пользовательскими объектами для выполнения обратных вызовов для каждой извлеченной строки, если это необходимо.

Результат запроса является итерируемым, поэтому он может быть использован в любом цикле, как и массив.

Этот метод может быть переопределен в подклассах запросов для обработки поведения при выполнении запроса.

Возвращает

Cake\Database\StatementInterface

expr() public

expr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression

Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием интерфейса fluent. Также можно переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.

Вы можете необязательно передать строку с исходным SQL-кодом, массив или выражения в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:

$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression

Параметры

Cake\Database\ExpressionInterface|array|string|null $rawExpression optional

Строка, массив или что угодно, что вы хотите обернуть в объект выражения

Возвращает

Cake\Database\Expression\QueryExpression

from() public

from(array|string $tables = [], bool $overwrite = false): $this

Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы в виде массива строк, массива объектов выражений, одного объекта выражения или одной строки.

Если передан массив, ключи будут использоваться для алиасирования таблиц, используя значение в качестве реального поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты запросов.

По умолчанию эта функция добавит любой переданный аргумент в список таблиц для выбора, если только второй аргумент не установлен в true.

Этот метод может быть использован для запросов SELECT, UPDATE и DELETE.

Примеры:

$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub

Параметры

array|string $tables optional

Таблицы для добавления в список. Этот аргумент может быть передан в виде массива строк, массива объектов выражений или одной строки. См. примеры выше для допустимых типов вызовов.

bool $overwrite optional

перезаписывать ли таблицы с переданным списком или нет

Возвращает

$this

func() public

func(): Cake\Database\FunctionsBuilder

Возвращает экземпляр объекта-билдера функций, который можно использовать для генерации произвольных SQL-функций.

Пример:

$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02'])

Возвращает

Cake\Database\FunctionsBuilder

getConnection() public

getConnection(): Cake\Database\Connection

Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.

Возвращает

Cake\Database\Connection

getDefaultTypes() public

getDefaultTypes(): array<int|string, string>

Получает типы по умолчанию текущей карты типов.

Возвращает

array<int|string, string>

getIterator() public

getIterator(): Cake\Database\StatementInterface

Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерироваться по запросу без ручного вызова execute(), делая его похожим на набор результатов, а не сам запрос.

Возвращает

Cake\Database\StatementInterface

getSelectTypeMap() public

getSelectTypeMap(): Cake\Database\TypeMap

Получает класс TypeMap, где хранятся типы для каждого поля в предложении SELECT.

Возвращает

Cake\Database\TypeMap

getTypeMap() public

getTypeMap(): Cake\Database\TypeMap

Возвращает существующее отображение типов.

Возвращает

Cake\Database\TypeMap

getValueBinder() public

getValueBinder(): Cake\Database\ValueBinder

Возвращает текущий используемый экземпляр ValueBinder.

ValueBinder отвечает за создание заготовок для запросов и временное связывание значений с этими заготовками, чтобы они могли быть корректно переданы в объект запроса.

Возвращает

Cake\Database\ValueBinder

group() 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

нужно ли перезаписать поля переданным списком или нет

Возвращает

$this

having() 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

См. также

\Cake\Database\Query::where()

identifier() public

identifier(string $identifier): Cake\Database\ExpressionInterface

Создаёт выражение, ссылающееся на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.

Значение используется как есть, и вам может потребоваться использовать псевдонимы или включать ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.

Пример

$query->newExpr()->lte('count', $query->identifier('total'));

Параметры

string $identifier

Идентификатор для выражения

Возвращает

Cake\Database\ExpressionInterface

innerJoin() 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

список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.

Возвращает

$this

insert() public

insert(array $columns, array<int|string, string> $types = []): $this

Создаёт запрос INSERT.

Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values().

Параметры

array $columns

Столбцы для вставки.

array<int|string, string> $types optional

Сопоставление столбцов и их типов данных.

Возвращает

$this

Исключения

RuntimeException
При наличии 0 столбцов.

into() public

into(string $table): $this

Устанавливает имя таблицы для запросов INSERT.

Параметры

string $table

Имя таблицы для вставки.

Возвращает

$this

isBufferedResultsEnabled() public

isBufferedResultsEnabled(): bool

Возвращает, включены/выключены буферизованные результаты.

При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать набор результатов, или кэшировать и итерировать его.

При отключении это позволит сэкономить память, так как полученные результаты не будут запоминаться для последующих итераций.

Возвращает

bool

isResultsCastingEnabled() public

isResultsCastingEnabled(): bool

Возвращает, включена/выключена обработка типов результатов.

При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующий PHP тип данных.

При отключении поля будут возвращены так, как получены из драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.

Возвращает

bool

join() 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

См. также

\Cake\Database\TypeFactory

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

список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.

Возвращает

$this

limit() 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

количество записей, которые должны быть возвращены

Возвращает

$this

modifier() public

modifier(Cake\Database\ExpressionInterface|array|string $modifiers, bool $overwrite = false): $this

Добавляет один или несколько SELECT модификаторов, которые будут использоваться в SELECT.

По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в true.

Пример:

// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products

// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products

Параметры

Cake\Database\ExpressionInterface|array|string $modifiers

модификаторы, которые должны быть применены к запросу

bool $overwrite optional

нужно ли сбросить порядок с перечнем полей

Возвращает

$this

newExpr() public

newExpr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression

Возвращает новый объект QueryExpression. Эта полезная функция при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования более специализированного класса QueryExpression, если это необходимо.

Вы можете необязательно передать одну строку SQL или массив или выражения в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:

$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression

Параметры

Cake\Database\ExpressionInterface|array|string|null $rawExpression optional

Строка, массив или что угодно, что вы хотите обернуть в объект выражения

Возвращает

Cake\Database\Expression\QueryExpression

offset() 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

количество записей, которые нужно пропустить

Возвращает

$this

order() public

order(Cake\Database\ExpressionInterfaceClosure|array|string $fields, bool $overwrite = false): $this

Добавляет одно или несколько полей, которые будут использоваться в операторе ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

Если передается массив, ключи будут использоваться в качестве самого поля, а значение будет представлять порядок, в котором это поле должно быть отсортировано. При многократном вызове с одинаковыми полями в качестве ключа последнее определение порядка будет иметь приоритет над другими.

По умолчанию эта функция добавляет любой переданный аргумент в список полей, которые должны быть выбраны, если второй аргумент не установлен в true.

Примеры:

$query->order(['title' => 'DESC', 'author_id' => 'ASC']);

Производит:

ORDER BY title DESC, author_id ASC

$query
    ->order(['title' => $query->newExpr('DESC NULLS FIRST')])
    ->order('author_id');

Сгенерирует:

ORDER BY title DESC NULLS FIRST, author_id

$expression = $query->newExpr()->add(['id % 2 = 0']);
$query->order($expression)->order(['title' => 'ASC']);

и

$query->order(function ($exp, $query) {
    return [$exp->add(['id % 2 = 0']), 'title' => 'ASC'];
});

Оба станут:

ORDER BY (id %2 = 0), title ASC

Поля/направления сортировки не проверяются билдером запросов. При передаче данных, вводимых пользователем, в order(), необходимо использовать разрешенный список полей/направлений.

Если вам нужно задать сложные выражения как условия сортировки, вы должны использовать orderAsc() или orderDesc().

Параметры

Cake\Database\ExpressionInterfaceClosure|array|string $fields

поля, которые должны быть добавлены в список

bool $overwrite optional

нужно ли сбросить порядок с перечнем полей

Возвращает

$this

orderAsc() public

orderAsc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this

Добавляет оператор ORDER BY с направлением ASC.

Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()

Поля сортировки не подходят для использования с данными, вводимыми пользователем, так как они не проверяются билдером запросов.

Параметры

Cake\Database\ExpressionInterfaceClosure|string $field

Поле для сортировки.

bool $overwrite optional

Необходимо ли сбрасывать операторы сортировки.

Возвращает

$this

orderDesc() public

orderDesc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this

Добавляет оператор ORDER BY с направлением DESC.

Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()

Поля сортировки не подходят для использования с данными, вводимыми пользователем, так как они не проверяются билдером запросов.

Параметры

Cake\Database\ExpressionInterfaceClosure|string $field

Поле для сортировки.

bool $overwrite optional

Необходимо ли сбрасывать операторы сортировки.

Возвращает

$this

page() public

page(int $num, int|null $limit = null): $this

Установите страницу результатов, которую вы хотите получить.

Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit по умолчанию будет равен существующему оператору limit, а если и он пуст, то будет использоваться 25.

Страницы должны начинаться с 1.

Параметры

int $num

Номер страницы, которую вы хотите получить.

int|null $limit optional

Количество строк на странице. Если null, будет использоваться текущий оператор limit.

Возвращает

$this

Исключения

InvalidArgumentException
Если номер страницы < 1.

removeJoin() public

removeJoin(string $name): $this

Удаляет объединение, если оно было определено.

Полезно при повторном определении объединений или при необходимости изменить порядок операторов объединения.

Параметры

string $name

Псевдоним/имя объединения, которое нужно удалить.

Возвращает

$this

rightJoin() public

rightJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this

Добавляет один RIGHT JOIN оператор объединения в запрос.

Это метод сокращенной записи для построения объединений с помощью join().

Аргументы этого метода идентичны аргументам метода leftJoin(), пожалуйста, обратитесь к описанию этого метода для получения дополнительной информации.

Параметры

array<string, mixed>|string $table

Таблица, с которой нужно объединиться

Cake\Database\ExpressionInterface|array|string $conditions optional

Условия для объединения.

array $types optional

Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.

Возвращает

$this

rowCountAndClose() public

rowCountAndClose(): int

Выполняет SQL этого запроса и немедленно закрывает оператор перед возвратом количества строк, измененных в результате.

Этот метод можно использовать с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчета записей.

Пример

$rowCount = $query->update('articles')
                ->set(['published'=>true])
                ->where(['published'=>false])
                ->rowCountAndClose();

Приведенный выше пример изменит столбец published на true для всех записей с false, и вернет количество обновленных записей.

Возвращает

int

select() public

select(Cake\Database\ExpressionInterface|callable|array|string $fields = [], bool $overwrite = false): $this

Добавляет новые поля, которые должны быть возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.

Если передается массив, ключи будут использованы для алиасинга полей, используя значение в качестве реального поля для алиасинга. Возможен алиасинг строк, объектов Expression или даже других объектов Query.

Если передается вызываемая функция, возвращаемый массив этой функции будет использован в качестве списка полей.

По умолчанию эта функция добавляет любой переданный аргумент в список выбираемых полей, если второй аргумент не установлен в значение true.

Примеры:

$query->select(['id', 'title']); // Produces SELECT id, title
$query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
$query->select('id', true); // Resets the list: SELECT id
$query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
$query->select(function ($query) {
    return ['article_id', 'total' => $query->count('*')];
})

По умолчанию поля не выбираются, если у вас есть экземпляр Cake\ORM\Query и вы пытаетесь добавить поля, вы также должны вызвать Cake\ORM\Query::enableAutoFields() для выбора стандартных полей из таблицы.

Параметры

Cake\Database\ExpressionInterface|callable|array|string $fields optional

поля, которые нужно добавить в список.

bool $overwrite optional

нужно ли сбросить поля переданным списком или нет

Возвращает

$this

set() public

set(Cake\Database\Expression\QueryExpressionClosure|array|string $key, mixed $value = null, array<string, string>|string $types = []): $this

Устанавливает одно или несколько полей для обновления.

Примеры

Передача строки:

$query->update('articles')->set('title', 'The Title');

Передача массива:

$query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']);

Передача вызываемой функции:

$query->update('articles')->set(function ($exp) {
  return $exp->eq('title', 'The title', 'string');
});

Параметры

Cake\Database\Expression\QueryExpressionClosure|array|string $key

Имя столбца или массив ключей

  • значения для установки. Это также может быть объект QueryExpression, содержащий фрагмент SQL. Это также может быть замыкание, которое должно возвращать объект выражения.
mixed $value optional

Значение, на которое нужно обновить $key. Может быть null, если $key — массив или QueryExpression. Когда $key — массив, этот параметр будет использоваться как $types.

array<string, string>|string $types optional

Типы столбцов для обработки данных.

Возвращает

$this

setConnection() public

setConnection(Cake\Database\Connection $connection): $this

Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.

Параметры

Cake\Database\Connection $connection

Экземпляр подключения

Возвращает

$this

setDefaultTypes() public

setDefaultTypes(array<int|string, string> $types): $this

Перезаписывает стандартные сопоставления типов для полей в реализующем объекте.

Этот метод полезен, если вам нужно установить сопоставления типов, которые используются совместно несколькими функциями/выражениями в запросе.

Чтобы добавить стандартное значение без перезаписи существующих, используйте getTypeMap()->addDefaults()

Параметры

array<int|string, string> $types

Массив типов для установки.

Возвращает

$this

См. также

\Cake\Database\TypeMap::setDefaults()

setSelectTypeMap() public

setSelectTypeMap(Cake\Database\TypeMap $typeMap): $this

Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.

Параметры

Cake\Database\TypeMap $typeMap

Объект карты для использования

Возвращает

$this

setTypeMap() public

setTypeMap(Cake\Database\TypeMap|array $typeMap): $this

Создает новую TypeMap, если $typeMap — массив, иначе меняет её на переданную.

Параметры

Cake\Database\TypeMap|array $typeMap

Создает TypeMap, если массив, иначе устанавливает переданную TypeMap

Возвращает

$this

setValueBinder() public

setValueBinder(Cake\Database\ValueBinder|null $binder): $this

Перезаписывает текущий привязчик значений

ValueBinder отвечает за генерацию заглушек запроса и временную привязку значений к этим заглушкам, чтобы они могли быть правильно переданы объекту statement.

Параметры

Cake\Database\ValueBinder|null $binder

Привязчик или null для отключения привязки.

Возвращает

$this

sql() public

sql(Cake\Database\ValueBinder|null $binder = null): string

Возвращает SQL-представление этого объекта.

Эта функция скомпилирует этот запрос, чтобы сделать его совместимым с диалектом SQL, используемым подключением. Этот процесс может добавлять, удалять или изменять любую часть запроса или внутреннее выражение, чтобы сделать его выполнимым на целевой платформе.

Результат запроса может содержать заглушки, которые будут заменены фактическими значениями при выполнении запроса, поэтому его лучше всего использовать с подготовленными операторами.

Параметры

Cake\Database\ValueBinder|null $binder optional

Привязчик значений, который генерирует заглушки параметров

Возвращает

string

traverse() public

traverse(callable $callback): $this

Перебирает все указанные части. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция обычно используется как способ перебора всех частей запроса, которые будут использоваться для построения запроса.

Обратный вызов получит 2 параметра, первый — значение части запроса, по которой происходит итерация, а второй — имя этой части.

Пример

$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
    if ($clause === 'select') {
        var_dump($value);
    }
});

Параметры

callable $callback

Функция или вызываемый объект, которые нужно выполнить для каждой части

Возвращает

$this

traverseExpressions() public

traverseExpressions(callable $callback): $this

Эта функция работает аналогично функции traverse(), с той разницей, что она производит полный обход всего дерева выражений. Это выполнит переданную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося внутри этого запроса на любой глубине в любой части запроса.

Обратный вызов получит в качестве первого параметра текущее посещаемое выражение.

Параметры

callable $callback

Функция, которая будет выполняться для каждого объекта ExpressionInterface, найденного внутри этого запроса.

Возвращает

$this

traverseParts() 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

Список частей запроса для обхода

Возвращает

$this

type() public

type(): string

Возвращает тип этого запроса (select, insert, update, delete)

Возвращает

string

union() public

union(Cake\Database\Query|string $query, bool $overwrite = false): $this

Добавляет весь запрос, который будет использоваться вместе с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов переданного запроса. Вы можете добавлять запросы по необходимости, вызывая этот метод несколько раз с разными запросами.

По умолчанию оператор UNION удаляет дубликаты строк. Если вы хотите включить все строки для всех запросов, используйте unionAll().

Примеры

$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
$query->select(['id', 'name'])->from(['d' => 'things'])->union($union);

Это даст:

SELECT id, name FROM things d UNION SELECT id, title FROM articles a

Параметры

Cake\Database\Query|string $query

полный SQL запрос, который будет использоваться в операторе UNION

bool $overwrite optional

нужно ли сбросить список запросов для обработки или нет

Возвращает

$this

unionAll() public

unionAll(Cake\Database\Query|string $query, bool $overwrite = false): $this

Добавляет полное запроса для использования совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с тем, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызывая этот метод несколько раз с различными запросами.

В отличие от UNION, UNION ALL не будет удалять дубликаты строк.

$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
$query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);

Будет производить:

SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a

Параметры

Cake\Database\Query|string $query

полный SQL запрос, используемый в операторе UNION

bool $overwrite optional

нужно ли сбросить список запросов, которые будут обработаны, или нет

Возвращает

$this

update() public

update(Cake\Database\ExpressionInterface|string $table): $this

Создаёт запрос обновления.

Может быть объединён с методами set() и where(), чтобы создать запросы обновления.

Параметры

Cake\Database\ExpressionInterface|string $table

Таблица, которую вы хотите обновить.

Возвращает

$this

values() public

values(Cake\Database\Expression\ValuesExpressionCake\Database\Query|array $data): $this

Устанавливает значения для запроса вставки.

Многократные вставки могут быть выполнены вызовом values() более одного раза или путём предоставления массива наборов значений. Дополнительно $data может быть экземпляром Query для вставки данных из другого SELECT-запроса.

Параметры

Cake\Database\Expression\ValuesExpressionCake\Database\Query|array $data

Данные для вставки.

Возвращает

$this

Исключения

Cake\Database\Exception\DatabaseException
если вы пытаетесь установить значения до объявления столбцов. Или если вы пытаетесь установить значения для не-запросов вставки.

where() public

where(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this

Добавляет условие или набор условий, используемых в операторе WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нём; значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.

При использовании массивов каждый элемент будет соединён со остальными условиями с помощью оператора AND. Последовательные вызовы этой функции также будут объединять новые указанные условия с использованием оператора AND. Дополнительно, значения могут быть выражены с использованием объектов выражений, которые могут включать другие объекты запросов.

Любые условия, созданные с помощью этого метода, могут быть использованы с любыми запросами типа SELECT, UPDATE и DELETE.

Условия с использованием операторов:

$query->where([
    'posted >=' => new DateTime('3 days ago'),
    'title LIKE' => 'Hello W%',
    'author_id' => 1,
], ['posted' => 'datetime']);

Предыдущий пример производит:

WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1

Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Допустимые типы могут быть взяты из отображённого с классом Database\Type.

Вложение условий с союзами:

$query->where([
    'author_id !=' => 1,
    'OR' => ['published' => true, 'posted <' => new DateTime('now')],
    'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime']

Предыдущий пример производит:

WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')

Вы можете вкладывать условия, используя союзы, сколько угодно. Иногда вам может потребоваться определить два разных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:

$query->where(['OR' => [['published' => false], ['published' => true]])

Что приведёт к:

WHERE (published = false) OR (published = true)

Помните, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он будет соединять переданные условия с предыдущим сохранённым списком с использованием оператора AND. Также, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не перезапишет предыдущее значение.

Использование объектов выражений:

$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp);

Предыдущий пример производит:

WHERE (id != 100 OR author_id != 1) AND published = 1

Другие объекты запросов могут быть использованы в качестве условий для любого поля.

Добавление условий поэтапно:

Вы можете использовать вызываемые функции для построения сложных выражений; функции принимают в качестве первого аргумента новый объект QueryExpression, а в качестве второго — этот экземпляр запроса. Функции должны возвращать объект выражения, который будет добавлен в список условий запроса с использованием оператора AND.

$query
  ->where(['title !=' => 'Hello World'])
  ->where(function ($exp, $query) {
    $or = $exp->or(['id' => 1]);
    $and = $exp->and(['id >' => 2, 'id <' => 10]);
   return $or->add($and);
  });
  • Предыдущий пример производит:

WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))

Условия как строки:

$query->where(['articles.author_id = authors.id', 'modified IS NULL']);

Предыдущий пример производит:

WHERE articles.author_id = authors.id AND modified IS NULL

Обратите внимание, что при использовании обозначения массива или объектов выражений все значения будут правильно заключены в кавычки и преобразуются в соответствующий тип данных базы данных автоматически, тем самым защищая ваше приложение от SQL-инъекций. Однако ключи не рассматриваются как небезопасный ввод и должны быть проверены/очищены.

Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Наиболее безопасный способ — никогда не использовать строковые условия.

Параметры

Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions optional

Условия для фильтрации.

array<string, string> $types optional

Ассоциативный массив имён типов, используемых для привязки значений к запросу

bool $overwrite optional

нужно ли сбросить условия с переданным списком или нет

Возвращает

$this

См. также

\Cake\Database\TypeFactory
\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

Параметры

Возвращает

$this

whereNotInList() 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

Параметры

Возвращает

$this

whereNotInListOrNull() 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

Параметры

Возвращает

$this

whereNotNull() public

whereNotNull(Cake\Database\ExpressionInterface|array|string $fields): $this

Удобный метод, который добавляет условие NOT NULL в запрос

Параметры

Cake\Database\ExpressionInterface|array|string $fields

Одно поле или выражения или список их, которые не должны быть null.

Возвращает

$this

whereNull() public

whereNull(Cake\Database\ExpressionInterface|array|string $fields): $this

Удобный метод, который добавляет условие IS NULL в запрос

Параметры

Cake\Database\ExpressionInterface|array|string $fields

Одно поле или выражения или список их, которые должны быть null.

Возвращает

$this

window() public

window(string $name, Cake\Database\Expression\WindowExpressionClosure $window, bool $overwrite = false): $this

Добавляет именованное выражение окна.

Вы отвечаете за добавление окон в том порядке, который требуется вашей базе данных.

Параметры

string $name

Имя окна

Cake\Database\Expression\WindowExpressionClosure $window

Выражение окна

bool $overwrite optional

Очистить все предыдущие выражения окон запроса

Возвращает

$this

with() public

with(Cake\Database\Expression\CommonTableExpressionClosure $cte, bool $overwrite = false): $this

Добавляет новое общее выражение с подзапросом (CTE) в запрос.

Примеры:

Общие выражения с подзапросами могут быть переданы как предварительно сконструированные объекты выражений:

$cte = new \Cake\Database\Expression\CommonTableExpression(
    'cte',
    $connection
        ->newQuery()
        ->select('*')
        ->from('articles')
);

$query->with($cte);

или возвращены из замыкания, которое получит новый объект общего выражения с подзапросом в качестве первого аргумента и новый пустой объект запроса в качестве второго аргумента:

$query->with(function (
    \Cake\Database\Expression\CommonTableExpression $cte,
    \Cake\Database\Query $query
 ) {
    $cteQuery = $query
        ->select('*')
        ->from('articles');

return $cte
        ->name('cte')
        ->query($cteQuery);
});

Параметры

Cake\Database\Expression\CommonTableExpressionClosure $cte

CTE для добавления.

bool $overwrite optional

Указывает, следует ли сбросить список CTE.

Возвращаемое значение

$this

Подробности свойств

$_connection protected

Экземпляр подключения, используемый для выполнения этого запроса.

Тип

Cake\Database\Connection

$_deleteParts protected deprecated

Список положений запроса для обработки при генерации оператора DELETE.

Тип

array<string>

$_dirty protected

Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.

Тип

bool

$_functionsBuilder protected

Экземпляр объекта генератора функций, используемого для создания произвольных SQL-функций.

Тип

Cake\Database\FunctionsBuilder|null

$_insertParts protected deprecated

Список положений запроса для обработки при генерации оператора INSERT.

Тип

array<string>

$_iterator protected

Объект оператора, полученный в результате выполнения этого запроса.

Тип

Cake\Database\StatementInterface|null

$_parts protected

Список SQL-частей, которые будут использованы для построения этого запроса.

Тип

array<string, mixed>

$_resultDecorators protected

Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при получении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.

Тип

array<callable>

$_selectParts protected deprecated

Список положений запроса для обработки при генерации оператора SELECT.

Тип

array<string>

$_selectTypeMap protected

Тип сопоставления для полей в операторе SELECT.

Тип

Cake\Database\TypeMap|null

$_type protected

Тип этого запроса (select, insert, update, delete).

Тип

string

$_typeMap protected

Тип

Cake\Database\TypeMap|null

$_updateParts protected deprecated

Список положений запроса для обработки при генерации оператора UPDATE.

Тип

array<string>

$_useBufferedResults protected

Логическое значение для отслеживания включения буферизованных результатов.

Тип

bool

$_valueBinder protected

Объект, отвечающий за генерацию заготовок запроса и временное хранение значений, связанных с каждой из них.

Тип

Cake\Database\ValueBinder|null

$typeCastEnabled protected

Флаг отслеживания для отключения приведения типов.

Тип

bool

© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.4/class-Cake.Database.Query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API