Spec-Zone.ru › CakePHP 3.6

Класс Query

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

Cake\Database\Query реализует Cake\Database\ExpressionInterface, IteratorAggregate использует Cake\Database\TypeMapTrait

Непосредственные подклассы

  • Cake\ORM\Query
Пространство имён: Cake\Database
Расположение: Database/Query.php

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

  • $_connection protected
    Cake\Database\Connection
    Экземпляр соединения, используемый для выполнения этого запроса.
  • $_dirty protected
    boolean

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

  • $_functionsBuilder protected
    Cake\Database\FunctionsBuilder|null
    Экземпляр объекта-строителя функций, используемого для генерации произвольных SQL-функций.
  • $_iterator protected
    Cake\Database\StatementInterface|null
    Объект оператора, полученный в результате выполнения этого запроса.
  • $_parts protected
    array
    Список SQL-частей, которые будут использованы для построения этого запроса.
  • $_resultDecorators protected
    array

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

  • $_selectTypeMap protected
    Cake\Database\TypeMap
    Карта типов для полей в запросе SELECT
  • $_type protected
    string
    Тип этого запроса (выборка, вставка, обновление, удаление).
  • $_useBufferedResults protected
    boolean

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

  • $_valueBinder protected
    Cake\Database\ValueBinder|null

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

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

Унаследованные свойства

  • _typeMap

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

  • __clone() public
    Выполнить глубокое клонирование этого объекта.
  • __construct() public
    Конструктор.
  • __debugInfo() public

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

  • __toString() public
    Возвращает строковое представление этого запроса (полное SQL-представление).
  • _conjugate() protected
    Вспомогательная функция, используемая для построения условий путём составления объектов QueryExpression.
  • _decorateStatement() protected

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

  • _dirty() protected

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

  • _makeJoin() protected
    Возвращает массив, который можно передать методу join для описания отдельной части условия соединения.
  • andHaving() public

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

  • andWhere() public

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

  • bind() public
    Связывает заполнитель запроса со значением и типом.
  • bufferResults() public deprecated
    Включить/выключить буферизацию результатов.
  • clause() public

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

  • connection() public deprecated

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

  • decorateResults() public

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

  • delete() public
    Создать запрос на удаление.
  • disableResultsCasting() public
    Отключает автоматическое приведение типов полей к соответствующему типу данных PHP
  • distinct() public

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

  • enableBufferedResults() public
    Включает/отключает буферизацию результатов.
  • enableResultsCasting() public
    Включает автоматическое приведение типов полей к соответствующему типу
  • epilog() public
    Строка или выражение, которое будет добавлено к сгенерированному запросу
  • execute() public

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

  • from() public

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

  • func() public

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

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

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

  • getSelectTypeMap() public

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

  • getValueBinder() public
    Возвращает текущий используемый экземпляр ValueBinder.
  • group() public

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

  • having() public

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

  • identifier() public

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

  • innerJoin() public
    Добавляет одно условие INNER JOIN в запрос.
  • insert() public
    Создать запрос на вставку.
  • into() public
    Установить имя таблицы для запросов вставки.
  • isBufferedResultsEnabled() public
    Возвращает, включена ли/выключена ли буферизация результатов.
  • join() public

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

  • leftJoin() public
    Добавляет одно условие LEFT JOIN в запрос.
  • limit() public

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

  • modifier() public
    Добавляет одно или несколько модификаторов SELECT для использования в SELECT.
  • newExpr() public

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

  • offset() public

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

  • orHaving() public deprecated

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

  • orWhere() public deprecated

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

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

  • selectTypeMap() public deprecated

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

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

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

  • setValueBinder() public
    Перезаписывает текущий связующий элемент значений
  • sql() public
    Возвращает SQL представление этого объекта.
  • traverse() public

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

  • traverseExpressions() public

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

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

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

  • unionAll() public

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

  • update() public
    Создаёт запрос на обновление.
  • valueBinder() public deprecated

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

  • values() public
    Устанавливает значения для запроса вставки.
  • where() public

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

  • whereInList() public

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

  • whereNotInList() public

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

  • whereNotNull() public
    Удобный метод, который добавляет условие NOT NULL в запрос
  • whereNull() public
    Удобный метод, который добавляет условие IS NULL в запрос

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

__clone()source public

__clone( )

Производит глубокое клонирование этого объекта.

Будет клонировать все объекты выражений, используемые в каждой из предложений, а также valueBinder.

__construct()source public

__construct( Cake\Database\Connection $connection )

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

Параметры

Cake\Database\Connection $connection

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

__debugInfo()source public

__debugInfo( )

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

Возвращает

массив

__toString()source public

__toString( )

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

Возвращает

строка

_conjugate()source protected

_conjugate( string $part , string|null|array|Cake\Database\ExpressionInterface|callable $append , string $conjunction , array $types )

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

Параметры

строка $part
Имя части запроса, к которой будет добавлена новая часть
строка|null|массив|Cake\Database\ExpressionInterface|callable $append
Выражение или функция-строитель, которые нужно добавить.
строка $conjunction
тип сочленения, который нужно использовать для обработки части
массив $types
ассоциативный массив имён типов, используемых для привязки значений к запросу

_decorateStatement()source protected

_decorateStatement( Cake\Database\StatementInterface $statement )

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

Параметры

Cake\Database\StatementInterface $statement
для оформления

Возвращает

Cake\Database\Statement\CallbackStatement

_dirty()source protected

_dirty( )

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

END_OF_DOCUMENT_MARKER

_makeJoin()source protected

_makeJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions , string $type )

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

Параметры

строка|массив $table
Таблица для объединения
строка|массив|Cake\Database\ExpressionInterface $conditions

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

строка $type
Тип объединения

Возвращает

массив

andHaving()source public

andHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )

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

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

Параметры

строка|массив|Cake\Database\ExpressionInterface|обратный вызов $conditions
Условия AND для HAVING.
массив $types необязательно []
ассоциативный массив имён типов, используемый для привязки значений к запросу

Возвращает


$this

См. также

\Cake\Database\Query::andWhere()

andWhere()source public

andWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )

Подключает ранее определённый набор условий к предоставленному списку с помощью оператора 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\ExpressionInterface|обратный вызов $conditions
Условия для добавления с помощью AND.
массив $types необязательно []
ассоциативный массив имён типов, используемый для привязки значений к запросу

Возвращает


$this

См. также

\Cake\Database\Query::where()
Cake\Database\Type

bind()source public

bind( string|integer $param , mixed $value , string|integer $type = 'string' )

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

Если тип выражается как "atype[]" (обратите внимание на скобки), это заставит заполнитель динамически переписываться, так что если значение является массивом, он создаст столько же заполнителей, сколько значений в нём. Например:

$query->bind(':id', [1, 2, 3], 'int[]');

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

Параметры

строка|целое число $param

заполнитель, который будет заменён на цитированную версию $value

смешанный $value
Связываемое значение
строка|целое число $type необязательно 'string'

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

Возвращает


$this

bufferResults()source public deprecated

bufferResults( boolean|null $enable = null )

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

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

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

Если вызывается без аргументов, он вернёт, включена ли буферизация.

Устарело

3.4.0 Используйте enableBufferedResults()/isBufferedResultsEnabled() вместо этого.

Параметры

boolean|null $enable необязательно null
Включить или выключить буферизацию

Возвращает

boolean|Cake\Database\Query
$this

clause()source public

clause( string $name )

Возвращает данные, которые хранились в указанном условии. Это полезно для изменения любой внутренней части запроса, и оно используется диалектами 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: массив

Параметры

строка $name
название условия, которое нужно вернуть

Возвращает

смешанный

Исключения

InvalidArgumentException
Если указанное условие не существует.

connection()source public deprecated

connection( Cake\Database\Connection|null $connection = null )

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

Устарело

3.4.0 Используйте setConnection()/getConnection() вместо этого.

Параметры

Cake\Database\Connection|null $connection необязательно null
Экземпляр соединения

Возвращает


$this|\Cake\Database\Connection

decorateResults()source public

decorateResults( callable|null $callback , boolean $overwrite = false )

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

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

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

Если вы хотите удалить все декораторы из стека, установите первый параметр в null и второй в true.

Пример

$query->decorateResults(function ($row) {
  $row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
   return $row;
});

Параметры

обратный вызов|null $callback
Функция обратного вызова, которая вызывается при извлечении результатов.
boolean $overwrite необязательно false
Добавить или заменить все существующие декораторы.

Возвращает


$this

delete()source public

delete( string|null $table = null )

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

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

Параметры

строка|null $table необязательно null
Таблица для удаления.

Возвращает


$this

disableResultsCasting()source public

disableResultsCasting( )

Отключает автоматическое преобразование полей в соответствующий тип данных PHP

Возвращает


$this
END_OF_DOCUMENT_MARKER

distinct()source public

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

Добавляет условие 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);

Параметры

array|Cake\Database\ExpressionInterface|string|boolean $on необязательно []

Включить/отключить режим distinct или список полей для фильтрации

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

Возвращает


$this

enableBufferedResults()source public

enableBufferedResults( boolean $enable = true )

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

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

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

Параметры

boolean $enable необязательно true
Включить буферизацию или нет

Возвращает


$this

enableResultsCasting()source public

enableResultsCasting( )

Включает автоматическое приведение типов полей к соответствующему типу

Возвращает


$this

epilog()source public

epilog( string|Cake\Database\Expression\QueryExpression|null $expression = null )

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

Примеры:

$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
 ->insert('articles', ['title'])
 ->values(['author_id' => 1])
 ->epilog('RETURNING id');

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

Параметры

string|Cake\Database\Expression\QueryExpression|null $expression необязательно null
Выражение, которое будет добавлено

Возвращает


$this

execute()source public

execute( )

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

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

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

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

Возвращает

Cake\Database\StatementInterface

from()source public

from( array|string $tables = [] , boolean $overwrite = false )

Добавляет одну или несколько таблиц, которые будут использоваться в предложении 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 необязательно []

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

boolean $overwrite необязательно false
нужно ли сбросить таблицы с переданным списком или нет

Возвращает


$this|array

func()source public

func( )

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

Пример:

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

Возвращает

Cake\Database\FunctionsBuilder

getConnection()source public

getConnection( )

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

Возвращает

Cake\Database\Connection

getIterator()source public

getIterator( )

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

Возвращает

Cake\Database\StatementInterface|null

Реализация

IteratorAggregate::getIterator()

getSelectTypeMap()source public

getSelectTypeMap( )

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

Возвращает

Cake\Database\TypeMap

getValueBinder()source public

getValueBinder( )

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

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

Возвращает

Cake\Database\ValueBinder

group()source public

group( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite = false )

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

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

Примеры:

// Produces GROUP BY id, title
$query->group(['id', 'title']);

// Produces GROUP BY title
$query->group('title');

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

Параметры

array|Cake\Database\ExpressionInterface|string $fields
поля для добавления в список
boolean $overwrite необязательно false
нужно ли сбросить поля с переданным списком или нет

Возвращает


$this

having()source public

having( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )

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

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

Параметры

string|array|Cake\Database\ExpressionInterface|callable|null $conditions необязательно null
Условие HAVING.
array $types необязательно []
ассоциативный массив типов, используемых для привязки значений к запросу
boolean $overwrite необязательно false
нужно ли сбросить условия с переданным списком или нет

Возвращает


$this

См. также

\Cake\Database\Query::where()

identifier()source public

identifier( string $identifier )

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

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

Пример

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

Параметры

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

Возвращает

Cake\Database\ExpressionInterface

innerJoin()source public

innerJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )

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

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

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

Параметры

строка|массив $table
Таблица для объединения
строка|массив|Cake\Database\ExpressionInterface $conditions необязательно []

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

массив $types необязательно []

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

Возвращает


$this

insert()source public

insert( array $columns , array $types = [] )

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

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

Параметры

массив $columns
Столбцы, в которые следует вставить данные.
массив $types необязательно []
Сопоставление между столбцами и их типами данных.

Возвращает


$this

Исключения

RuntimeException
Когда столбцов 0.

into()source public

into( string $table )

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

Параметры

строка $table
Имя таблицы, в которую необходимо вставить данные.

Возвращает


$this

isBufferedResultsEnabled()source public

isBufferedResultsEnabled( )

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

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

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

Возвращает

boolean

join()source public

join( array|string|null $tables = null , array $types = [] , boolean $overwrite = false )

Добавляет одну или несколько таблиц, которые будут использоваться в качестве операторов 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

Параметры

массив|строка|null $tables необязательно null
список таблиц для объединения в запросе
массив $types необязательно []
ассоциативный массив имён типов, используемых для привязки значений к запросу
логическое значение $overwrite необязательно false
нужно ли сбрасывать объединения с переданным списком или нет

Возвращает


$this|массив

См. также

Cake\Database\Type

leftJoin()source public

leftJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )

Добавляет один 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() для получения дополнительной информации о условиях и типах.

Параметры

строка|массив $table
Таблица для объединения
строка|массив|Cake\Database\ExpressionInterface $conditions необязательно []

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

массив $types необязательно []

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

Возвращает


$this

limit()source public

limit( integer|Cake\Database\ExpressionInterface $num )

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

Примеры

$query->limit(10) // generates LIMIT 10
$query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)

Параметры

целое число|Cake\Database\ExpressionInterface $num
количество записей, которые должны быть возвращены

Возвращает


$this

modifier()source public

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

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

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

Пример:

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

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

Параметры

массив|Cake\Database\ExpressionInterface|строка $modifiers
модификаторы, которые нужно применить к запросу
логическое значение $overwrite необязательно false
нужно ли сбрасывать порядок с переданным списком или нет

Возвращает


$this

newExpr()source public

newExpr( mixed $rawExpression = null )

Возвращает новый объект 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

Параметры

смешанный тип $rawExpression необязательно null
Строка, массив или что-либо, что нужно обернуть в объект выражения

Возвращает

Cake\Database\Expression\QueryExpression

offset()source public

offset( integer|Cake\Database\ExpressionInterface $num )

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

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

Примеры

$query->offset(10) // generates OFFSET 10
$query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)

Параметры

целое число|Cake\Database\ExpressionInterface $num
количество записей, которые должны быть пропущены

Возвращает


$this
END_OF_DOCUMENT_MARKER

orHaving()source public deprecated

orHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )

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

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

Устаревший

3.5.0 Этот метод создаёт сложный для предсказания SQL, основанный на текущем состоянии запроса. Используйте Query::having() вместо этого, так как его поведение более предсказуемо и легче понять.


Параметры

string|array|Cake\Database\ExpressionInterface|callable $conditions
Условия OR для HAVING.
array $types необязательно []
ассоциативный массив имен типов, используемых для привязки значений к запросу.

Возвращает


$this

См. также

\Cake\Database\Query::orWhere()

orWhere()source public deprecated

orWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )

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

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

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

Примеры:

$query->where(['title' => 'Hello World')->orWhere(['title' => 'Foo']);

Результат:

WHERE title = 'Hello World' OR title = 'Foo'

$query
  ->where(['OR' => ['published' => false, 'published is NULL']])
  ->orWhere(['author_id' => 1, 'comments_count >' => 10])

Результат:

WHERE (published = 0 OR published IS NULL) OR (author_id = 1 AND comments_count > 10)

$query
  ->where(['title' => 'Foo'])
  ->orWhere(function ($exp, $query) {
    return $exp
      ->or_(['author_id' => 1])
      ->add(['author_id' => 2]);
  });

Создаёт следующие условия:

WHERE (title = 'Foo') OR (author_id = 1 OR author_id = 2)

Устаревший

3.5.0 Этот метод создаёт сложный для предсказания SQL, основанный на текущем состоянии запроса. Используйте Query::where() вместо этого, так как его поведение более предсказуемо и легче понять.


Параметры

string|array|Cake\Database\ExpressionInterface|callable $conditions
Условия, которые нужно добавить с помощью OR.
array $types необязательно []
ассоциативный массив имен типов, используемых для привязки значений к запросу

Возвращает


$this

См. также

\Cake\Database\Query::where()
Cake\Database\Type

order()source public

order( array|Cake\Database\ExpressionInterface|callable|string $fields , boolean $overwrite = false )

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

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

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

Примеры:

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

Результат:

ORDER BY title DESC, author_id ASC

$query->order(['title' => '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().

Параметры

array|Cake\Database\ExpressionInterface|callable|string $fields
Поля, которые нужно добавить в список
boolean $overwrite необязательно false
Сбросить порядок со списком полей или нет

Возвращает


$this

orderAsc()source public

orderAsc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )

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

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

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

Параметры

string|Cake\Database\Expression\QueryExpression $field
Поле для сортировки.
boolean $overwrite необязательно false
Сбрасывать ли предложения порядка.

Возвращает


$this

orderDesc()source public

orderDesc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )

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

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

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

Параметры

string|Cake\Database\Expression\QueryExpression $field
Поле для сортировки.
boolean $overwrite необязательно false
Сбрасывать ли предложения порядка.

Возвращает


$this

page()source public

page( integer $num , integer|null $limit = null )

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

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

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

Параметры

integer $num
Номер страницы, которую вы хотите.
integer|null $limit необязательно null

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

Возвращает


$this

Исключения

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

removeJoin()source public

removeJoin( string $name )

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

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

Параметры

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

Возвращает


$this

rightJoin()source public

rightJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )

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

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

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

Параметры

string|array $table
Таблица для соединения
string|array|Cake\Database\ExpressionInterface $conditions необязательно []

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

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

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

Возвращает


$this

rowCountAndClose()source public

rowCountAndClose( )

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

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

Пример

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

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

Возвращает

integer
END_OF_DOCUMENT_MARKER ```

select()source public

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

Добавляет новые поля, которые будут возвращены оператором 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|строка|вызываемая функция $fields необязательно []
поля, которые необходимо добавить в список.
булево $overwrite необязательно false
нужно ли сбросить поля с переданным списком или нет

Возвращает


$this

selectTypeMap()source public устаревшее

selectTypeMap( Cake\Database\TypeMap $typeMap = null )

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

При вызове без аргументов возвращается текущий объект TypeMap.

Устаревшее

3.4.0 Используйте setSelectTypeMap()/getSelectTypeMap() вместо этого.

Параметры

Cake\Database\TypeMap $typeMap необязательно null
Объект карты для использования

Возвращает


$this|\Cake\Database\TypeMap

set()source public

set( string|array|callable|Cake\Database\Expression\QueryExpression $key , mixed $value = null , array $types = [] )

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

Примеры

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

$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\QueryExpression $key

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

смешанный $value необязательно null

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

массив $types необязательно []
Типы столбцов для обработки данных.

Возвращает


$this

setConnection()source public

setConnection( Cake\Database\Connection $connection )

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

Параметры

Cake\Database\Connection $connection
Экземпляр подключения

Возвращает


$this

setSelectTypeMap()source public

setSelectTypeMap( Cake\Database\TypeMap $typeMap )

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

Параметры

Cake\Database\TypeMap $typeMap
Объект карты для использования

Возвращает


$this

setValueBinder()source public

setValueBinder( Cake\Database\ValueBinder|boolean $binder )

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

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

Параметры

Cake\Database\ValueBinder|булево $binder
Связыватель или false для отключения связывания.

Возвращает


$this

sql()source public

sql( Cake\Database\ValueBinder $generator = null )

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

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

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

Параметры

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

Объект-заглушка, который будет содержать связанные значения для выражений

Возвращает

строка

Реализация

Cake\Database\ExpressionInterface::sql()

traverse()source public

traverse( callable $visitor , array $parts = [] )

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

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

Пример:

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

Параметры

вызываемая функция $visitor
Функция или вызываемый объект, который нужно выполнить для каждой части
массив $parts необязательно []
Операторы запроса для обхода

Возвращает


$this

Реализация

Cake\Database\ExpressionInterface::traverse()

traverseExpressions()source public

traverseExpressions( callable $callback )

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

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

Параметры

вызываемая функция $callback

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

Возвращает


$this|null

type()source public

type( )

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

Возвращает

строка

union()source public

union( string|Cake\Database\Query $query , boolean $overwrite = false )

Добавляет полный запрос, который будет использоваться совместно с оператором 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 $query
полный SQL-запрос для использования в операторе UNION
булево $overwrite необязательно false
нужно ли сбросить список запросов для обработки или нет

Возвращает


$this

unionAll()source public

unionAll( string|Cake\Database\Query $query , boolean $overwrite = false )

Добавляет полный запрос, который будет использоваться совместно с оператором 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 $query
полный SQL-запрос для использования в операторе UNION
булево $overwrite необязательно false
нужно ли сбросить список запросов для обработки или нет

Возвращает


$this
END_OF_DOCUMENT_MARKER

update()source public

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

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

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

Параметры

строка|Cake\Database\ExpressionInterface $table
Таблица, которую вы хотите обновить.

Возвращает


$this

valueBinder()source public deprecated

valueBinder( Cake\Database\ValueBinder|false|null $binder = null )

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

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

Устарело

3.5.0 Используйте setValueBinder()/getValueBinder() вместо этого.

Параметры

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

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

Возвращает


$this|\Cake\Database\ValueBinder

values()source public

values( array|Cake\Database\Query $data )

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

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

Параметры

массив|Cake\Database\Query $data
Данные для вставки.

Возвращает


$this

Исключения

Cake\Database\Exception

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


where()source public

where( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )

Добавляет условие или набор условий, которые будут использованы в предложении 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-инъекций. Однако ключи не рассматриваются как небезопасные входные данные и должны быть проверены/распознаны.

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

Параметры

строка|массив|Cake\Database\ExpressionInterface|вызываемая функция|null $conditions необязательно null
Условия для фильтрации.
массив $types необязательно []
ассоциативный массив имён типов, используемых для привязки значений к запросу
логическое значение $overwrite необязательно false
нужно ли сбрасывать условия с переданным списком или нет

Возвращает


$this

См. также

Cake\Database\Type
Cake\Database\Expression\QueryExpression

whereInList()source public

whereInList( string $field , array $values , array $options = [] )

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

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

Параметры: - types - Ассоциативный массив имён типов, используемых для привязки значений к запросу - allowEmpty - Разрешить пустой массив.

Параметры

строка $field
Поле
массив $values
Массив значений
массив $options необязательно []
Параметры

Возвращает


$this

whereNotInList()source public

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

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

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

Параметры

строка $field
Поле
массив $values
Массив значений
массив $options необязательно []
Параметры

Возвращает


$this

whereNotNull()source public

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

Метод для удобства добавления условия NOT NULL в запрос

Параметры

массив|строка|Cake\Database\ExpressionInterface $fields
Одно поле или выражения или список из них, которые не должны быть NULL

Возвращает


$this

whereNull()source public

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

Метод для удобства добавления условия IS NULL в запрос

Параметры

массив|строка|Cake\Database\ExpressionInterface $fields
Одно поле или выражения или список из них, которые должны быть NULL

Возвращает


$this

Методы, используемые из Cake\Database\TypeMapTrait

defaultTypes()source public deprecated

defaultTypes( array $types = null )

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

Устарело

3.4.0 Используйте setDefaultTypes()/getDefaultTypes() вместо этого.

Параметры

массив $types необязательно null
Массив типов для установки.

Возвращает


$this|массив

getDefaultTypes()source public

getDefaultTypes( )

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

Возвращает

массив

getTypeMap()source public

getTypeMap( )

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

Возвращает

Cake\Database\TypeMap

setDefaultTypes()source public

setDefaultTypes( array $types )

Разрешает установку типов по умолчанию при цепочечном запросе.

Параметры

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

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


$this

setTypeMap()source public

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

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

Параметры

массив|Cake\Database\TypeMap $typeMap
Создаёт TypeMap, если массив, иначе устанавливает переданную TypeMap

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


$this

typeMap()source public deprecated

typeMap( array|Cake\Database\TypeMap|null $typeMap = null )

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

Устарело

3.4.0 Используйте setTypeMap()/getTypeMap() вместо этого.

Параметры

массив|Cake\Database\TypeMap|null $typeMap необязательно null
Создаёт TypeMap, если массив, иначе устанавливает переданную TypeMap

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


$this|\Cake\Database\TypeMap

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

$_connectionsource

protected Cake\Database\Connection

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

$_dirtysource

protected boolean

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

false

$_functionsBuildersource

protected Cake\Database\FunctionsBuilder|null

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

$_iteratorsource

protected Cake\Database\StatementInterface|null

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

$_partssource

protected array

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

[
    'delete' => true,
    'update' => [],
    'set' => [],
    'insert' => [],
    'values' => [],
    'select' => [],
    'distinct' => false,
    'modifier' => [],
    'from' => [],
    'join' => [],
    'where' => null,
    'group' => [],
    'having' => null,
    'order' => null,
    'limit' => null,
    'offset' => null,
    'union' => [],
    'epilog' => null
]

$_resultDecoratorssource

protected array

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

[]

$_selectTypeMapsource

protected Cake\Database\TypeMap

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

$_typesource

protected string

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

'select'

$_useBufferedResultssource

protected boolean

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

true

$_valueBindersource

protected Cake\Database\ValueBinder|null

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

$typeCastEnabledsource

protected boolean

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

true

© 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/3.6/class-Cake.Database.Query.html

Spec-Zone.ru

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