Spec-Zone.ru › CakePHP 3.8

Класс Query

Этот класс представляет собой SQL-запрос к реляционной базе данных. Запрос может быть разных типов: select, update, insert и delete. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в конкретный диалект 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
    Тип этого запроса (select, insert, update, delete).
  • $_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
    Создать запрос на удаление.
  • disableBufferedResults() 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|функция $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, описывающему отдельную условную связь.

Параметры

string|array $table
Таблица для объединения.
string|array|Cake\Database\ExpressionInterface $conditions

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

string $type
тип соединения

Возвращает

array

andHaving()source public

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

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

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

Параметры

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

Возвращает


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

Параметры

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

Возвращает


$this

См. также

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

bind()source public

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

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

$query->bind(':id', 1, 'integer');

Параметры

string|integer $param

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

mixed $value
Значение, подлежащее привязке
string|integer $type optional 'string'

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

Возвращает


$this

bufferResults()source public deprecated

bufferResults( boolean|null $enable = null )

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

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

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

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

Устарело

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

Параметры

boolean|null $enable optional 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: string Имя таблицы для обновления
  • 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
При отсутствии указанного предложения.

connection()source public deprecated

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

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

Устарело

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

Параметры

Cake\Database\Connection|null $connection optional 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;
});

Параметры

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

Возвращает


$this

delete()source public

delete( string|null $table = null )

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

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

Параметры

string|null $table optional null
Таблица, используемая при удалении.

Возвращает


$this

disableBufferedResults()source public

disableBufferedResults( )

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

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

Возвращает


$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, в котором хранятся типы для каждого поля в выборке.

Возвращает

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

Параметры

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

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

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

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

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

Устаревшее

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


Параметры

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

Возвращает


$this

См.

\Cake\Database\Query::orWhere()
END_OF_DOCUMENT_MARKER ```

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

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

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

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

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

Примеры:

$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() вместо него, так как он имеет более предсказуемое и понятное поведение.


Параметры

строка|массив|Cake\Database\ExpressionInterface|обратный вызов $conditions
Условия для добавления с ИЛИ.
массив $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().

Параметры

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

Возвращает


$this

orderAsc()source public

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

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

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

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

Параметры

строка|Cake\Database\Expression\QueryExpression $field
Поле, по которому нужно отсортировать.
логическое $overwrite необязательно false
Нужно ли сбросить предложения сортировки.

Возвращает


$this

orderDesc()source public

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

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

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

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

Параметры

строка|Cake\Database\Expression\QueryExpression $field
Поле, по которому нужно отсортировать.
логическое $overwrite необязательно false
Нужно ли сбросить предложения сортировки.

Возвращает


$this

page()source public

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

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

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

Параметры

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

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

Возвращает


$this

Выбрасывает

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

removeJoin()source public

removeJoin( string $name )

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

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

Параметры

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

Возвращает


$this

rightJoin()source public

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

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

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

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

Параметры

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

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

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

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

Возвращает


$this

rowCountAndClose()source public

rowCountAndClose( )

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

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

Пример

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

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

Возвращает

целое число

select()source public

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

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

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

Параметры

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

Возвращает


$this

setValueBinder()source public

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

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

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

Параметры

Cake\Database\ValueBinder|boolean $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( )

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

Возвращает

строка

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

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

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

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

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

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 )

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

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

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

Параметры

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

Возвращает


$this

См. также

\Cake\Database\TypeMap::setDefaults()

setTypeMap()source public

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

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

Параметры

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

Возвращает


$this

typeMap()source public устарело

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

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

Устарело

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

Параметры

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

Возвращает


$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

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

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

Spec-Zone.ru

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