Spec-Zone.ru › CakePHP 4.2

Класс 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
    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

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

Возвращает

array

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

См. также

\Cake\Database\Query::andWhere()

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\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: булево
  • 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(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

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

Возвращает

$this

enableBufferedResults() public

enableBufferedResults(bool $enable = true): $this

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

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

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

Параметры

bool $enable optional

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

Возвращает

$this

enableResultsCasting() public

enableResultsCasting(): $this

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

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

Возвращает

$this

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

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

Возвращает

$this

execute() public

execute(): Cake\Database\StatementInterface

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

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

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

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

Возвращает

Cake\Database\StatementInterface

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

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

Возвращает

$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

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

Возвращает

array

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

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

Возвращает

$this

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

См. также

\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(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

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

Возвращает

$this

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

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

Возвращает

$this

isBufferedResultsEnabled() public

isBufferedResultsEnabled(): bool

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

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

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

Возвращает

bool

isResultsCastingEnabled() public

isResultsCastingEnabled(): bool

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

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

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

Возвращает

bool

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

См. также

\Cake\Database\TypeFactory

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

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

Возвращает

$this

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

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

Возвращает

$this

modifier() 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 необязательный

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

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

$this

newExpr() 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\QueryExpression

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

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

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

$this

order() 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 необязательный

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

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

$this

orderAsc() public

orderAsc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this

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

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

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

Параметры

stringCake\Database\Expression\QueryExpressionClosure $field

Поле, по которому нужно отсортировать.

bool $overwrite необязательный

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

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

$this

orderDesc() public

orderDesc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this

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

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

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

Параметры

stringCake\Database\Expression\QueryExpressionClosure $field

Поле, по которому нужно отсортировать.

bool $overwrite необязательный

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

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

$this

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

Псевдоним/имя соединения для удаления.

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

$this

rightJoin() 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 необязательный

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

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

$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(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 необязательный

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

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

$this

set() 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 необязательно

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

Возвращает

$this

setConnection() public

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

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

Параметры

Cake\Database\Connection $connection

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

Возвращает

$this

setDefaultTypes() public

setDefaultTypes(array $types): $this

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

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

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

Параметры

array $types

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

Возвращает

$this

См. также

\Cake\Database\TypeMap::setDefaults()

setSelectTypeMap() public

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

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

Параметры

Cake\Database\TypeMap $typeMap

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

Возвращает

$this

setTypeMap() public

setTypeMap(arrayCake\Database\TypeMap $typeMap): $this

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

Параметры

arrayCake\Database\TypeMap $typeMap

Создает TypeMap, если массив, иначе устанавливает указанный TypeMap

Возвращает

$this

setValueBinder() public

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

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

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

Параметры

Cake\Database\ValueBinder|null $binder

Связывающий элемент или null для отключения связывания.

Возвращает

$this

sql() public

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

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

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

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

Параметры

Cake\Database\ValueBinder|null $binder необязательно

Value binder, генерирующий плейсхолдеры параметров

Возвращает

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, 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

Список частей запроса, по которым необходимо произвести обход

Возвращает

$this

type() public

type(): string

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

Возвращает

string

union() 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 необязательно

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

Возвращает

$this

unionAll() 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 необязательно

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

Возвращает

$this

update() public

update(stringCake\Database\ExpressionInterface $table): $this

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

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

Параметры

stringCake\Database\ExpressionInterface $table

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

Возвращает

$this

values() 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\TypeFactory
\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

Параметры

Возвращает

$this

whereNotInList() public

whereNotInList(string $field, array $values, array $options = []): $this

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

Этот метод допускает пустые входные данные в отличие от where(), если вы установили 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки.

Параметры

string $field

Поле

array $values

Массив значений

array $options optional

Параметры

Возвращает

$this

whereNotNull() public

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

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

Параметры

array|stringCake\Database\ExpressionInterface $fields

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

Возвращает

$this

whereNull() public

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

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

Параметры

array|stringCake\Database\ExpressionInterface $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(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

Spec-Zone.ru

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