Spec-Zone.ru › CakePHP 4.3

Класс Query

Этот класс представляет собой SQL-запрос к реляционной базе данных. Запрос может быть разных типов, таких как выборка, обновление, вставка и удаление. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в конкретный диалект 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
    array<string>

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

  • $_dirty protected
    bool

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

  • $_functionsBuilder protected
    Cake\Database\FunctionsBuilder|null

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

  • $_insertParts protected
    array<string>

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

  • $_iterator protected
    Cake\Database\StatementInterface|null

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

  • $_parts protected
    array<string, mixed>

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

  • $_resultDecorators protected
    array<callable>

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

  • $_selectParts protected
    array<string>

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

  • $_selectTypeMap protected
    Cake\Database\TypeMap|null

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

  • $_type protected
    string

    Тип этого запроса (выборка, вставка, обновление, удаление).

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

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

  • $_useBufferedResults protected
    bool

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

  • $_valueBinder protected
    Cake\Database\ValueBinder|null

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

  • $typeCastEnabled protected
    bool

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

END_OF_DOCUMENT_MARKER

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

  • __clone() public

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

  • __construct() public

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

  • __debugInfo() public

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

  • __toString() public

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

  • _conjugate() protected

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

  • _decorateStatement() protected

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

  • _dirty() protected

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

  • _expressionsVisitor() protected

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

  • _makeJoin() protected

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

  • andHaving() public

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

  • andWhere() public

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

  • bind() public

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

  • clause() public

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

  • decorateResults() public

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

  • delete() public

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

  • disableBufferedResults() public

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

  • disableResultsCasting() public

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

  • distinct() public

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

  • enableBufferedResults() public

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

  • enableResultsCasting() public

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

  • epilog() public

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

  • execute() public

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

  • from() public

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

  • func() public

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

  • getConnection() public

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

  • getDefaultTypes() public

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

  • getIterator() public

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

  • getSelectTypeMap() public

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

  • getTypeMap() public

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

  • getValueBinder() public

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

  • group() public

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

  • having() public

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

  • identifier() public

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

  • innerJoin() public

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

  • insert() public

    Создаёт запрос вставки.

  • into() public

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

  • isBufferedResultsEnabled() public

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

  • isResultsCastingEnabled() public

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

  • join() public

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

  • leftJoin() public

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

  • limit() public

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

  • modifier() public

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

  • newExpr() public

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

  • offset() public

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

  • order() public

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

  • orderAsc() public

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

  • orderDesc() public

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

  • page() public

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

  • removeJoin() public

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

  • rightJoin() public

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

  • rowCountAndClose() public

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

  • select() public

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

  • set() public

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

  • setConnection() public

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

  • setDefaultTypes() public

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

  • setSelectTypeMap() public

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

  • setTypeMap() public

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

  • setValueBinder() public

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

  • sql() public

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

  • traverse() public

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

  • traverseExpressions() public

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

  • traverseParts() public

    Итерация по указанным частям.

  • type() public

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

  • union() public

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

  • unionAll() public

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

  • update() public

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

  • values() public

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

  • where() public

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

  • whereInList() public

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

  • whereNotInList() public

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

  • whereNotInListOrNull() public

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

  • whereNotNull() public

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

  • whereNull() public

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

  • window() public

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

  • with() public

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

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

__clone() public

__clone(): void

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

Возвращает

void

__construct() public

__construct(Cake\Database\Connection $connection)

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

Параметры

Cake\Database\Connection $connection

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

__debugInfo() public

__debugInfo(): array<string, mixed>

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

Возвращает

array<string, mixed>

__toString() public

__toString(): string

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

Возвращает

string

_conjugate() protected

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

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

Параметры

string $part

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

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

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

string $conjunction

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

array<string, string> $types

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

Возвращает

void

_decorateStatement() protected

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

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

Параметры

Cake\Database\StatementInterface $statement

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

Возвращает

Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface

_dirty() protected

_dirty(): void

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

Возвращает

void

_expressionsVisitor() protected

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

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

Параметры

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

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

Closure $callback

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

Возвращает

void

_makeJoin() protected

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

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

Параметры

array<string, mixed>|string $table

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

Cake\Database\ExpressionInterface|array|string $conditions

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

string $type

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

Возвращает

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

Включить/выключить 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(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

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

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

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

array<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<string, string> $types = []): $this

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

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

Параметры

array $columns

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

array<string, string> $types optional

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

Возвращает

$this

Исключения

RuntimeException
При 0 столбцах.

into() public

into(string $table): $this

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

Параметры

string $table

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

Возвращает

$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.

По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в значение 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 необязательно

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

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

$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->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression

Параметры

Cake\Database\ExpressionInterface|array|string|null $rawExpression необязательно

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

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

Cake\Database\Expression\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 необязательно

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

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

$this

orderAsc() public

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

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

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

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

Параметры

Cake\Database\ExpressionInterfaceClosure|string $field

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

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

Сбросить ли условия сортировки.

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

$this

orderDesc() public

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

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

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

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

Параметры

Cake\Database\ExpressionInterfaceClosure|string $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(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this

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

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

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

Параметры

array<string, mixed>|string $table

Таблица для объединения.

Cake\Database\ExpressionInterface|array|string $conditions необязательно

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

array $types необязательно

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

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

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

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

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

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

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

$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. Также может быть замыканием (Closure), которое должно возвращать объект выражения.
mixed $value необязательно

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

array<string, string>|string $types необязательно

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

Возвращает

$this

setConnection() public

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

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

Параметры

Cake\Database\Connection $connection

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

Возвращает

$this

setDefaultTypes() public

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

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

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

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

Параметры

array<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 отвечает за создание плейсхолдеров запроса и временное связывание значений с этими плейсхолдерами, чтобы они могли быть корректно переданы объекту оператора.

Параметры

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

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

Возвращает

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

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

Возвращает

$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')

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

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

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

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

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

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

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

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

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

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

Добавление условий в несколько шагов:

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

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

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

Условия в виде строк:

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

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

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

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

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

Параметры

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

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

array<string, string> $types optional

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

bool $overwrite optional

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

Возвращает

$this

См. также

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

Список пунктов запроса, просматриваемых для генерации оператора DELETE.

Тип

array<string>

$_dirty protected

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

Тип

bool

$_functionsBuilder protected

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

Тип

Cake\Database\FunctionsBuilder|null

$_insertParts protected

Список пунктов запроса, просматриваемых для генерации оператора INSERT.

Тип

array<string>

$_iterator protected

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

Тип

Cake\Database\StatementInterface|null

$_parts protected

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

Тип

array<string, mixed>

$_resultDecorators protected

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

Тип

array<callable>

$_selectParts protected

Список пунктов запроса, просматриваемых для генерации оператора SELECT.

Тип

array<string>

$_selectTypeMap protected

Карта типов для полей в выборке.

Тип

Cake\Database\TypeMap|null

$_type protected

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

Тип

string

$_typeMap protected

Тип

Cake\Database\TypeMap|null

$_updateParts protected

Список пунктов запроса, просматриваемых для генерации оператора UPDATE.

Тип

array<string>

$_useBufferedResults protected

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

Тип

bool

$_valueBinder protected

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

Тип

Cake\Database\ValueBinder|null

$typeCastEnabled protected

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

Тип

bool

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

Spec-Zone.ru

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