Spec-Zone.ru › CakePHP 3.4

Класс 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).
  • $_typeCastAttached protected
    boolean
    Флаг отслеживания, чтобы гарантировать, что только один преобразователь типов добавлен.
  • $_useBufferedResults protected
    boolean

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

  • $_valueBinder protected
    Cake\Database\ValueBinder|null

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

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

  • _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
    Включить/выключить буферизацию результатов.
  • clause() public

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

  • connection() public

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

  • decorateResults() public

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

  • delete() public
    Создать запрос на удаление.
  • distinct() public

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

  • enableBufferedResults() 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(). Обратитесь к его документации для понимания использования каждого параметра.

  • 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

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

  • orWhere() public

    Подключает любое ранее определённое множество условий к предоставленному списку с помощью оператора OR. Эта функция принимает список условий в том же формате, что и метод 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

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

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

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

  • 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

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

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

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

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

__clone()source public

__clone( )

Выполните глубокое клонирование этого объекта.

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

__construct()source public

__construct( Cake\Database\Connection $connection )

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

Параметры

Cake\Database\Connection $connection

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

__debugInfo()source public

__debugInfo( )

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

Возвращает

array

__toString()source public

__toString( )

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

Возвращает

string

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

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

_makeJoin()source protected

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

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

Параметры

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

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

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

Возвращает

array

andHaving()source public

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

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

Параметры

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

Возвращает


$this

См. также

\Cake\Database\Query::andWhere()
END_OF_DOCUMENT_MARKER

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 необязательно 'строка'

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

Возвращает


$this

bufferResults()source public

bufferResults( boolean|null $enable null )

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

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

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

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

Устарело

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

Параметры

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

Возвращает

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

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

Возвращает


$this

delete()source public

delete( string|null $table null )

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

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

Параметры

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

Возвращает


$this

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

Параметры

массив|Cake\Database\ExpressionInterface|строка|булево $on необязательно []

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

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

Возвращает


$this

enableBufferedResults()source public

enableBufferedResults( boolean $enable true )

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

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

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

Параметры

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

Возвращает


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

Параметры

строка|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

Параметры

массив|строка $tables необязательно []

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

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

Возвращает


$this|массив

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

Параметры

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

Возвращает


$this

having()source public

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

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

Параметры

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

Возвращает


$this

См. также

\Cake\Database\Query::where()

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 [] )

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

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

Параметры

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

Возвращает


$this

Исключения

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

into()source public

into( string $table )

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

Параметры

строка $table
Имя таблицы для вставки.

Возвращает


$this

isBufferedResultsEnabled()source public

isBufferedResultsEnabled( )

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

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

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

Возвращает

boolean
END_OF_DOCUMENT_MARKER

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'])`` will produceINNER JOIN authors a ON 1 = 1`

Объединение можно полностью описать и использовать псевдоним, используя запись в формате массива:

$query->join([
    'a' => [
        'table' => 'authors',
        'type' => 'LEFT',
        'conditions' => 'a.id = b.author_id'
    ]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id

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

$query->join([
    'a' => [
        'table' => 'authors',
        'type' => 'LEFT',
        'conditions' => 'a.id = b.author_id'
    ],
    'p' => [
        'table' => 'publishers',
        'type' => 'INNER',
        'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
    ]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation"

Использование условий и типов

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

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

$query->join(['a' => [
    'table' => 'articles',
    'conditions' => [
        'a.posted >=' => new DateTime('-3 days'),
        'a.published' => true,
        'a.author_id = authors.id'
    ]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean'])

Перезапись объединений

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

$query->join(['alias' => 'table']); // joins table with as alias
$query->join(['alias' => 'another_table']); // joins another_table with as alias
$query->join(['something' => 'different_table'], [], true); // resets joins list

Параметры

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

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


$this|array

См. также

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

Параметры

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

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

array $types optional []

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

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


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

Параметры

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

Параметры

array|Cake\Database\ExpressionInterface|string $modifiers
модификаторы, которые необходимо применить к запросу
boolean $overwrite optional 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

Параметры

mixed $rawExpression optional 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)

Параметры

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

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


$this

orHaving()source public

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

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

Устарело

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


Параметры

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

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


$this

См. также

\Cake\Database\Query::orWhere()

orWhere()source public

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 optional []
ассоциативный массив имен типов, используемых для привязки значений к запросу

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


$this

См. также

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

order()source public

order( array|Cake\Database\ExpressionInterface|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']);

Превратится в:

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

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

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

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

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

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

sql()source public

sql( Cake\Database\ValueBinder $generator null )

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

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

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

Параметры

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

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

Возвращает

string

Реализация

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

Параметры

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

Возвращает


$this

Реализация

Cake\Database\ExpressionInterface::traverse()

traverseExpressions()source public

traverseExpressions( callable $callback )

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

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

Параметры

callable $callback

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

Возвращает


$this|null

type()source public

type( )

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

Возвращает

string

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

Параметры

string|Cake\Database\Query $query
полный SQL запрос, который будет использоваться в операторе UNION
boolean $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

Параметры

string|Cake\Database\Query $query
полный SQL запрос, который будет использоваться в операторе UNION
boolean $overwrite необязательный false
нужно ли сбросить список запросов для обработки или нет

Возвращает


$this

update()source public

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

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

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

Параметры

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

Возвращает


$this

valueBinder()source public

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

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

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

Устарело

3.5.0 Используйте getValueBinder() для получения значения.

Параметры

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

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

Возвращает


$this|\Cake\Database\ValueBinder

values()source public

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

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

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

Параметры

array|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() с третьим параметром, установленным в 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 необязательно []
ассоциативный массив имен типов, используемых для связывания значений с запросом
boolean $overwrite необязательно false
нужно ли сбрасывать условия с переданным списком или нет

Возвращает


$this

См. также

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

Методы, используемые из 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 )

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

Параметры

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

Возвращает


$this

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 массив

Список 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 массив

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

[]

$_selectTypeMapsource

protected Cake\Database\TypeMap

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

$_typesource

protected строка

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

'select'

$_typeCastAttachedsource

protected boolean

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

false

$_useBufferedResultssource

protected boolean

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

true

$_valueBindersource

protected Cake\Database\ValueBinder|null

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

© 2005–2017 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.4/class-Cake.Database.Query.html

Spec-Zone.ru

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