Spec-Zone.ru › CakePHP 3.1

Класс Query

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

Cake\Database\Query implements Cake\Database\ExpressionInterface, IteratorAggregate uses Cake\Database\TypeMapTrait
Extended by Cake\ORM\Query implements JsonSerializable, Cake\Datasource\QueryInterface uses Cake\Datasource\QueryTrait
Пространство имён: Cake\ORM
Расположение: ORM/Query.php

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

__callsource public

__call( mixed $method , mixed $arguments )

Исключения

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

__clonesource public

__clone( )

Обработка клонирования объекта.

Уничтожает внутренний итератор клонов, клонирует экземпляры связывателя значений и eagerloader.

Переопределяет

Cake\Database\Query::__clone()

__constructsource public

__construct( Cake\Database\Connection $connection , Cake\ORM\Table $table )

Конструктор

Параметры

Cake\Database\Connection $connection
Объект подключения
Cake\ORM\Table $table
Таблица, на которой начинается запрос

Переопределяет

Cake\Database\Query::__construct()

__debugInfosource public

__debugInfo( )

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

Возвращает

array
массив

Переопределяет

Cake\Database\Query::__debugInfo()

_addAssociationsToTypeMapsource protected

_addAssociationsToTypeMap( Cake\ORM\Table $table , Cake\Database\TypeMap $typeMap , array $associations )

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

Параметры

Cake\ORM\Table $table
Экземпляр таблицы для извлечения ассоциаций.
Cake\Database\TypeMap $typeMap
Тип отображения для проверки столбцов. Этот тип отображения косвенно изменяется через Cake\ORM\Query::addDefaultTypes()
массив $associations
Вложенное дерево ассоциаций для обхода.

_addDefaultFieldssource protected

_addDefaultFields( )

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

_decorateResultssource protected

_decorateResults( Traversable $result )

Декорирует итератор результатов с помощью MapReduce и форматирования.

Параметры

Traversable $result
Исходные результаты

Возвращает

Cake\Datasource\ResultSetInterface
\Cake\Datasource\ResultSetInterface

_dirtysource protected

_dirty( )

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

Переопределяет

Cake\Database\Query::_dirty()

_executesource protected

_execute( )

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

Возвращает

Cake\ORM\ResultSet
\Cake\ORM\ResultSet

_performCountsource protected

_performCount( )

Выполняет и возвращает COUNT(*) для запроса.

Возвращает

integer
целое число

_transformQuerysource protected

_transformQuery( )

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

В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет необходимые соединения для eager загрузки ассоциаций, определённых с помощью contain

См. также

Cake\Database\Query::execute()

addDefaultTypessource public

addDefaultTypes( Cake\ORM\Table $table )

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

Этот метод возвращает тот же объект запроса для цепочки вызовов.

Параметры

Cake\ORM\Table $table
Таблица для извлечения типов

Возвращает

mixed
$this

allsource public

all( )

Получение результатов для этого запроса.

Возвращает

Cake\Datasource\ResultSetInterface
\Cake\Datasource\ResultSetInterface

Исключения

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

Реализация

Cake\Datasource\QueryInterface::all()

applyOptionssource public

applyOptions( array $options )

Заполняет или добавляет части текущих пунктов запроса с помощью массива. Это удобно для передачи всех пунктов запроса сразу. Массив опций принимает:

Заполняет или добавляет части текущих пунктов запроса с помощью массива. Это удобно для передачи всех пунктов запроса сразу. Массив опций принимает:

  • fields: Соответствует методу select
  • conditions: Соответствует методу where
  • limit: Соответствует методу limit
  • order: Соответствует методу order
  • offset: Соответствует методу offset
  • group: Соответствует методу group
  • having: Соответствует методу having
  • contain: Соответствует опциям contain для eager загрузки
  • join: Соответствует методу join
  • page: Соответствует методу page

Пример:

$query->applyOptions([
  'fields' => ['id', 'name'],
  'conditions' => [
    'created >=' => '2013-01-01'
  ],
  'limit' => 10
]);

Эквивалентно:

$query
->select(['id', 'name'])
->where(['created >=' => '2013-01-01'])
->limit(10)

Параметры

массив $options
Список пунктов запроса для применения новых частей.

Возвращает

mixed
$this

Реализация

Cake\Datasource\QueryInterface::applyOptions()

autoFieldssource public

autoFields( boolean|null $value null )

Устанавливает/считывает, автоматически ли ORM должен добавлять поля.

По умолчанию вызов select() отключит автоматическое добавление полей. Вы можете снова включить автоматическое добавление полей с помощью этого метода.

Параметры

boolean|null $value опционально null
Значение для установки или null для чтения текущего значения.

Возвращает

boolean|$this
$this либо текущее значение, либо объект запроса.

cachesource public

cache( mixed $key , mixed $config 'default' )

Возвращает

mixed
$this

Исключения

RuntimeException
При попытке кеширования запроса, не являющегося запросом на выборку.
END_OF_DOCUMENT_MARKER

cleanCopysource public

cleanCopy( )

Создаёт копию текущего запроса, запускает события перед поиском и сбрасывает некоторые состояния.

Следующие состояния будут очищены:

  • autoFields
  • limit
  • offset
  • функции map/reduce
  • форматеры результатов
  • order
  • включения

Этот метод создаёт копии запросов, которые полезны при работе с подзапросами.

Возвращает

Cake\ORM\Query
Cake\ORM\Query

containsource public

contain( array|string $associations null , boolean $override false )

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

Пример:

// Bring articles' author information
$query->contain('Author');

// Also bring the category and tags associated to each article
$query->contain(['Category', 'Tag']);

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

Пример:

// Eager load the product info, and for each product load other 2 associations
$query->contain(['Product' => ['Manufacturer', 'Distributor']);

// Which is equivalent to calling
$query->contain(['Products.Manufactures', 'Products.Distributors']);

// For an author query, load his region, state and country
$query->contain('Regions.States.Countries');

Можно контролировать условия и поля, выбранные для каждой из содержащихся ассоциаций:

Пример:

$query->contain(['Tags' => function ($q) {
    return $q->where(['Tags.is_popular' => true]);
}]);

$query->contain(['Products.Manufactures' => function ($q) {
    return $q->select(['name'])->where(['Manufactures.active' => true]);
}]);

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

  • foreignKey: Используется для установки другого поля для сопоставления обеих таблиц, если установлено в false, условия соединения не будут генерироваться автоматически. false может использоваться только для присоединяемых ассоциаций и не может использоваться с ассоциациями hasMany или belongsToMany.
  • fields: Массив с полями, которые должны быть извлечены из ассоциации
  • queryBuilder: Эквивалентно передаче вызываемого объекта вместо массива параметров

Пример:

// Set options for the hasMany articles that will be eagerly loaded for an author
$query->contain([
  'Articles' => [
    'fields' => ['title', 'author_id']
  ]
]);

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

// Use special join conditions for getting an Articles's belongsTo 'authors'
$query->contain([
  'Authors' => [
    'foreignKey' => false,
    'queryBuilder' => function ($q) {
      return $q->where(...); // Add full filtering conditions
    }
  ]
]);

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

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

Параметры

array|string $associations необязательный null
Список псевдонимов таблиц для запроса
boolean $override необязательный false
заменять ли предыдущий список переданным, по умолчанию предыдущий список будет объединён с новым.

Возвращает

array|$this
$this

countsource public

count( )

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

Возвращает COUNT(*) для запроса. Если запрос не был изменён, а счёт уже выполнен, возвращается кэшированное значение.

Возвращает

integer
int

Реализация

Cake\Datasource\QueryInterface::count()

countersource public

counter( callable|null $counter )

Регистрирует вызываемую функцию, которая будет выполнена при вызове метода count в этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение метода count.

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

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

Если первый параметр имеет значение null, вызывается встроенная функция счётчика.

Параметры

callable|null $counter
Значение счётчика

Возвращает

mixed
$this

deletesource public

delete( string|null $table null )

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

Изменяет тип запроса на 'delete'. Может быть объединён с методом where() для создания запросов на удаление.

Параметры

string|null $table необязательный null
Неиспользуемый параметр.

Возвращает

mixed
$this

Переопределяет

Cake\Database\Query::delete()

eagerLoadersource public

eagerLoader( Cake\ORM\EagerLoader $instance null )

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

Параметры

Cake\ORM\EagerLoader $instance необязательный null
Загрузчик с ленивой загрузкой для использования. Передайте null, чтобы получить текущий загрузчик.

Возвращает

Cake\ORM\EagerLoader|$this
$this

findsource public

find( string $finder , array $options [] )

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

Параметры

string $finder
Используемый метод поиска.
array $options необязательный []
Параметры для метода поиска.

Возвращает

mixed
$this Возвращает изменённый запрос.

См. также

Cake\ORM\Table::find()

Реализация

Cake\Datasource\QueryInterface::find()

hydratesource public

hydrate( boolean|null $enable null )

Включает/выключает гидратацию сущностей.

Если установлено в false, будут возвращены массивы результатов.

Параметры

boolean|null $enable необязательный null
Используйте булево значение для установки режима гидратации. Null извлечёт текущий режим гидратации.

Возвращает

boolean|$this
Булево значение при чтении, и $this при установке режима.

innerJoinWithsource public

innerJoinWith( string $assoc , callable $builder null )

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

Эта функция добавит записи в граф contain.

Пример:

// Bring only articles that were tagged with 'cake'
$query->innerJoinWith('Tags', function ($q) {
    return $q->where(['name' => 'cake']);
);

Это создаст следующий SQL:

SELECT Articles.*
FROM articles Articles
INNER JOIN tags Tags ON Tags.name = 'cake'
INNER JOIN articles_tags ArticlesTags ON ArticlesTags.tag_id = Tags.id
  AND ArticlesTags.articles_id = Articles.id

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

Параметры

string $assoc
Ассоциация для соединения
callable $builder необязательный null
Функция, которая получит предварительно созданный объект запроса, который может быть использован для добавления пользовательских условий или выбора некоторых полей

Возвращает

mixed
$this

См. также

Cake\ORM\Query::matching()

insertsource public

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

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

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

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

Параметры

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

Возвращает

mixed
$this

Исключения

RuntimeException
Если столбцы отсутствуют.

Переопределяет

Cake\Database\Query::insert()

jsonSerializesource public

jsonSerialize( )

Выполняет запрос и преобразует результат в JSON.

Часть интерфейса JsonSerializable.

Возвращает

Cake\Datasource\ResultSetInterface
Данные для преобразования в JSON.

Реализация

JsonSerializable::jsonSerialize()

leftJoinWithsource public

leftJoinWith( string $assoc , callable $builder null )

Создаёт LEFT JOIN с указанной связанной таблицей, сохраняя соответствие внешнего ключа и пользовательские условия, которые были изначально установлены для него.

Эта функция добавит записи в contain граф.

Пример:

// Get the count of articles per user
$usersQuery
    ->select(['total_articles' => $query->func()->count('Articles.id')])
    ->leftJoinWith('Articles')
    ->group(['Users.id'])
    ->autoFields(true);

Вы также можете настроить условия, передаваемые в LEFT JOIN:

// Get the count of articles per user with at least 5 votes
$usersQuery
    ->select(['total_articles' => $query->func()->count('Articles.id')])
    ->leftJoinWith('Articles', function ($q) {
        return $q->where(['Articles.votes >=' => 5]);
    })
    ->group(['Users.id'])
    ->autoFields(true);

Это создаст следующий SQL-запрос:

SELECT COUNT(Articles.id) AS total_articles, Users.*
FROM users Users
LEFT JOIN articles Articles ON Articles.user_id = Users.id AND Articles.votes >= 5
GROUP BY USers.id

Возможен left join глубоких ассоциаций с помощью нотации точек

Пример:

// Total comments in articles by 'markstory'
$query
 ->select(['total_comments' => $query->func()->count('Comments.id')])
 ->leftJoinWith('Comments.Users', function ($q) {
    return $q->where(['username' => 'markstory']);
)
->group(['Users.id']);

Обратите внимание, что запрос, переданный в лямбда-функцию, будет принимать только вызовы select, where, andWhere и orWhere на нём. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в основном запросе.

Параметры

строка $assoc
Связь, с которой следует выполнить join
вызываемый объект $builder необязательно null
функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей

Возвращает

mixed
$this

matchingsource public

matching( string $assoc , callable $builder null )

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

Эта функция добавит записи в contain граф.

Пример:

// Bring only articles that were tagged with 'cake'
$query->matching('Tags', function ($q) {
    return $q->where(['name' => 'cake']);
);

Возможна фильтрация по глубоким ассоциациям с использованием нотации точек:

Пример:

// Bring only articles that were commented by 'markstory'
$query->matching('Comments.Users', function ($q) {
    return $q->where(['username' => 'markstory']);
);

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

Пример:

// Bring unique articles that were commented by 'markstory'
$query->distinct(['Articles.id'])
->matching('Comments.Users', function ($q) {
    return $q->where(['username' => 'markstory']);
);

Обратите внимание, что запрос, переданный в лямбда-функцию, будет принимать только вызовы select, where, andWhere и orWhere на нём. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в основном запросе.

Параметры

строка $assoc
Связь для фильтрации
вызываемый объект $builder необязательно null
функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей

Возвращает

mixed
$this

notMatchingsource public

notMatching( string $assoc , callable $builder null )

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

Эта функция добавит записи в contain граф.

Пример:

// Bring only articles that were not tagged with 'cake'
$query->notMatching('Tags', function ($q) {
    return $q->where(['name' => 'cake']);
);

Возможна фильтрация по глубоким ассоциациям с помощью нотации точек:

Пример:

// Bring only articles that weren't commented by 'markstory'
$query->notMatching('Comments.Users', function ($q) {
    return $q->where(['username' => 'markstory']);
);

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

Пример:

// Bring unique articles that were commented by 'markstory'
$query->distinct(['Articles.id'])
->notMatching('Comments.Users', function ($q) {
    return $q->where(['username' => 'markstory']);
);

Обратите внимание, что запрос, переданный в лямбда-функцию, будет принимать только вызовы select, where, andWhere и orWhere на нём. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в основном запросе.

Параметры

строка $assoc
Связь для фильтрации
вызываемый объект $builder необязательно null
функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей

Возвращает

mixed
$this

selectsource public

select( array|Cake\Database\ExpressionInterface|string|Cake\ORM\Table|Cake\ORM\Association $fields [] , boolean $overwrite false )

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

Если вы передадите экземпляр класса Cake\ORM\Table или Cake\ORM\Association, все поля в схеме таблицы или связи будут добавлены в оператор SELECT.

Параметры

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

Возвращает

mixed
$this

Переопределяет

Cake\Database\Query::select()

sqlsource public

sql( Cake\Database\ValueBinder $binder null )

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

Параметры

Cake\Database\ValueBinder $binder необязательно null
$generator Объект-заполнитель, который будет хранить связанные значения для выражений

Возвращает

string
строка

Переопределяет

Cake\Database\Query::sql()

triggerBeforeFindsource public

triggerBeforeFind( )

Вызывает событие beforeFind для объекта репозитория запроса.

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

updatesource public

update( string|null $table null )

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

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

Параметры

строка|null $table необязательно null
Неиспользуемый параметр.

Возвращает

mixed
$this

Переопределяет

Cake\Database\Query::update()

Наследуемые методы из Cake\Database\Query

__toStringsource public

__toString( )

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

Возвращает

string
строка

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

_decorateStatementsource protected

_decorateStatement( Cake\Database\StatementInterface $statement )

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

Параметры

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

Возвращает

Cake\Database\Statement\CallbackStatement
\Cake\Database\Statement\CallbackStatement

_makeJoinsource protected

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

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

Параметры

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

Возвращает

array
массив
END_OF_DOCUMENT_MARKER

andHavingsource public

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

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

Параметры

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

Возвращает

mixed
$this

См. также

Cake\Database\Query::andWhere()

andWheresource 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
      ->add(['author_id' => 1])
      ->or_(['author_id' => 2]);
  });

Сгенерирует следующие условия:

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

Параметры

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

Возвращает

mixed
$this

См. также

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

bindsource public

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

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

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

Параметры

string|integer $param
заполнитель, который будет заменён на цитированную версию $value
mixed $value
Значение, которое нужно привязать
string|integer $type необязательно 'string'
имя сопоставленного типа, используемое для преобразования при отправке в базу данных

Возвращает

mixed
$this

bufferResultssource public

bufferResults( boolean|null $enable null )

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

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

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

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

Параметры

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

Возвращает

boolean|$this
$this

clausesource public

clause( string $name )

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

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

  • update: строка Имя таблицы для обновления
  • set: QueryExpression
  • insert: массив, вернёт массив, содержащий таблицу + столбцы.
  • values: ValuesExpression
  • select: массив, вернёт пустой массив, если столбцы не заданы
  • distinct: boolean
  • from: массив таблиц
  • join: массив
  • set: массив
  • where: QueryExpression, возвращает null, если не задано
  • group: массив
  • having: QueryExpression, возвращает null, если не задано
  • order: OrderByExpression, возвращает null, если не задано
  • limit: целое число или QueryExpression, null, если не задано
  • offset: целое число или QueryExpression, null, если не задано
  • union: массив

Параметры

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

Возвращает

mixed
mixed

connectionsource public

connection( Cake\Datasource\ConnectionInterface $connection null )

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

Параметры

Cake\Datasource\ConnectionInterface $connection необязательно null
экземпляр

Возвращает

mixed
$this|\Cake\Datasource\ConnectionInterface

decorateResultssource public

decorateResults( null|callable $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|callable $callback
Функция обратного вызова, которая вызывается при получении результатов.
boolean $overwrite необязательно false
Добавить или заменить все существующие декораторы.

Возвращает

mixed
$this

distinctsource 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
сбросить поля переданным списком или нет

Возвращает

mixed
$this

epilogsource public

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

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

Примеры:

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

Параметры

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

Возвращает

mixed
$this
END_OF_DOCUMENT_MARKER

executesource public

execute( )

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

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

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

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

Возвращает

Cake\Database\StatementInterface
Cake\Database\StatementInterface

fromsource public

from( array|Cake\Database\ExpressionInterface|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

Параметры

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

Возвращает

mixed
$this

funcsource public

func( )

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

Пример:

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

Возвращает

Cake\Database\FunctionsBuilder
\Cake\Database\FunctionsBuilder

getIteratorsource public

getIterator( )

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

Возвращает

Iterator
\Iterator

Реализация

IteratorAggregate::getIterator()

groupsource 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
нужно ли сбросить поля переданным списком или нет

Возвращает

mixed
$this

havingsource public

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

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

Параметры

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

Возвращает

mixed
$this

См.

Cake\Database\Query::where()

innerJoinsource public

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

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

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

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

Параметры

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

Возвращает

mixed
$this

intosource public

into( string $table )

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

Параметры

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

Возвращает

mixed
$this

joinsource 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
нужно ли сбросить соединения переданным списком или нет

Возвращает

mixed
$this

См.

Cake\Database\Type
END_OF_DOCUMENT_MARKER

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

Возвращает

mixed
$this

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

Возвращает

mixed
$this

modifiersource 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
модификаторы, которые необходимо применить к запросу
boolean $overwrite необязательно false
определяет, следует ли сбросить порядок с помощью списка полей или нет

Возвращает

mixed
$this

newExprsource 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
\Cake\Database\Expression\QueryExpression

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

Возвращает

mixed
$this

orHavingsource public

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

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

Параметры

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

Возвращает

mixed
$this

См.

Cake\Database\Query::orWhere()

orWheresource 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
      ->add(['author_id' => 1])
      ->or_(['author_id' => 2]);
  });

Генерирует следующие условия:

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

Параметры

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

Возвращает

mixed
$this

См.

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

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

Возвращает

mixed
$this

orderAscsource public

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

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

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

Параметры

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

Возвращает

mixed
$this

orderDescsource public

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

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

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

Параметры

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

Возвращает

mixed
$this

pagesource public

page( integer $num , integer $limit null )

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

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

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

Параметры

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

Возвращает

mixed
$this

removeJoinsource public

removeJoin( string $name )

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

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

Параметры

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

Возвращает

mixed
$this

rightJoinsource public

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

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

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

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

Параметры

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

Возвращает

mixed
$this

setsource 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 необязательно []
Типы столбцов для обработки данных.

Возвращает

mixed
$this

traversesource 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 необязательно []
Узлы запроса для перебора.

Возвращает

mixed
$this

Реализация

Cake\Database\ExpressionInterface::traverse()

traverseExpressionssource public

traverseExpressions( callable $callback )

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

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

Параметры

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

Возвращает

mixed
$this|null

typesource public

type( )

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

Возвращает

string
строка

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

Возвращает

mixed
$this

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

Возвращает

mixed
$this

valueBindersource public

valueBinder( Cake\Database\ValueBinder $binder null )

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

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

Параметры

Cake\Database\ValueBinder $binder необязательно null
новый экземпляр для установки. Если не передано значение, вернется значение по умолчанию

Возвращает

mixed
$this|\Cake\Database\ValueBinder

valuessource public

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

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

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

Параметры

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

Возвращает

mixed
$this

Выбрасывает

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

wheresource 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])->type('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
нужно ли сбрасывать условия с переданным списком или нет

Возвращает

mixed
$this

См. также

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

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

_decoratorClasssource protected

_decoratorClass( )

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

Возвращает

string
строка

aliasFieldsource public

aliasField( string $field , string $alias null )

Возвращает массив ключ => значение, представляющий одно алиасированное поле, которое можно передать непосредственно методу select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.

Если поле уже имеет псевдоним, то оно не будет изменено. Если $alias не передан, будет использоваться таблица по умолчанию для этого запроса.

Параметры

строка $field
Поле для присвоения псевдонима
строка $alias необязательно null
псевдоним, используемый для префикса поля

Возвращает

array
массив

Реализация

Cake\Datasource\QueryInterface::aliasField()

aliasFieldssource public

aliasFields( array $fields , string|null $defaultAlias null )

Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в одном массиве.

Параметры

массив $fields
Поля для присвоения псевдонима
строка|null $defaultAlias необязательно null
Псевдоним по умолчанию

Возвращает

array
массив

Реализация

Cake\Datasource\QueryInterface::aliasFields()

eagerLoadedsource public

eagerLoaded( boolean|null $value null )

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

Параметры

логическое значение|null $value необязательно null
Выполнять ли явную загрузку.

Возвращает

mixed
$this|\Cake\ORM\Query

firstsource public

first( )

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

Пример:

$singleUser = $query->select(['id', 'username'])->first();

Возвращает

mixed
первый результат из набора результатов

Реализация

Cake\Datasource\QueryInterface::first()

firstOrFailsource public

firstOrFail( )

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

Возвращает

mixed
Первый результат из набора результатов.

Выбрасывает

Cake\Datasource\Exception\RecordNotFoundException
Если нет первого записы.

formatResultssource public

formatResults( callable $formatter null , boolean|integer $mode 0 )

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

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

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

Если первый аргумент установлен в null, он вернет список ранее зарегистрированных процедур map reduce.

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

Пример:

// Return all results from the table indexed by id
$query->select(['id', 'name'])->formatResults(function ($results) {
  return $results->indexBy('id');
});

// Add a new column to the ResultSet
$query->select(['name', 'birth_date'])->formatResults(function ($results) {
  return $results->map(function ($row) {
    $row['age'] = $row['birth_date']->diff(new DateTime)->y;
    return $row;
  });
});

Параметры

вызываемая функция $formatter необязательно null
Вызываемая функция форматирования.
логическое значение|целое число $mode необязательно 0
Перезаписать, добавить или добавить в начало форматировщик.

Возвращает

mixed
$this|массив

getIteratorsource public

getIterator( )

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

Возвращает

Iterator
\Итератор

Переопределяет

Cake\Database\Query::getIterator()

getOptionssource public

getOptions( )

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

Пример:

$query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']);
$query->getOptions(); // Returns ['doABarrelRoll' => true]

Возвращает

array
массив

См. также

\Cake\ORM\Query::applyOptions() для получения информации о параметрах, которые будут обработаны этим классом и не будут возвращены этой функцией
END_OF_DOCUMENT_MARKER

mapReducesource public

mapReduce( callable $mapper null , callable $reducer null , boolean $overwrite false )

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

Маршрутизация MapReduce будет выполняться только при выполнении запроса и первой попытке извлечения результата.

Если первый аргумент установлен в null, он вернёт список ранее зарегистрированных процедур map reduce.

Если третий аргумент установлен в true, он удалит предыдущие map-редукторы и заменит их переданными аргументами.

Параметры

callable $mapper необязательно null
Вызываемый объект-маппер.
callable $reducer необязательно null
Функция редукции.
boolean $overwrite необязательно false
Установите в true, чтобы перезаписать существующие функции map + reduce.

Возвращает

mixed
$this|array

См. также

\Cake\Collection\Iterator\MapReduce для получения подробной информации о том, как передавать данные в map-редуктор.

repositorysource public

repository( Cake\Datasource\RepositoryInterface $table null )

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

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

Параметры

Cake\Datasource\RepositoryInterface $table необязательно null
Объект таблицы по умолчанию для использования

Возвращает

Cake\Datasource\RepositoryInterface|$this
$this

Реализация

Cake\Datasource\QueryInterface::repository()

setResultsource public

setResult( Cake\Datasource\ResultSetInterface $results )

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

Установка набора результатов запроса сделает execute() бесполезной операцией. Вместо выполнения SQL-запроса и извлечения результатов будет возвращен ResultSet, предоставленный этому методу.

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

Параметры

Cake\Datasource\ResultSetInterface $results
Результаты, которые должен вернуть этот запрос.

Возвращает

mixed
$this Объект запроса.

toArraysource public

toArray( )

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

Возвращает

array
array

Реализация

Cake\Datasource\QueryInterface::toArray()

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

defaultTypessource public

defaultTypes( array $types null )

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

Параметры

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

Возвращает

mixed
$this|array

typeMapsource public

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

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

Параметры

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

Возвращает

mixed
$this|TypeMap

Резюме констант

integer APPEND

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

0
boolean OVERWRITE

Указывает, что операция должна перезаписать список

true
integer PREPEND

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

1

Резюме свойств

$_autoFieldssource

protected boolean

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

$_beforeFindFiredsource

protected boolean

True, если событие beforeFind уже было инициировано для этого запроса

false

$_countersource

protected callable

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

$_eagerLoadersource

protected Cake\ORM\EagerLoader

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

$_hasFieldssource

protected boolean

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

$_hydratesource

protected boolean

Выполнять ли гидрацию результатов в объекты сущностей

true

$_resultsCountsource

protected integer

Значение COUNT(*) для запроса.

При установке выполнение запроса count будет пропущено.

Свойства, унаследованные от Cake\Database\Query

$_connectionsource

protected Cake\Datasource\ConnectionInterface

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

$_dirtysource

protected boolean

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

false

$_functionsBuildersource

protected Cake\Database\FunctionsBuilder

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

$_iteratorsource

protected Cake\Database\StatementInterface

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

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

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

[]

$_typesource

protected string

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

'select'

$_useBufferedResultssource

protected boolean

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

true

$_valueBindersource

protected ValueBinder

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

Свойства, используемые из Cake\Database\TypeMapTrait

$_typeMapsource

protected Cake\Database\TypeMap

Свойства, используемые из Cake\Datasource\QueryTrait

$_cachesource

protected Cake\Datasource\QueryCacher

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

$_eagerLoadedsource

protected boolean

Является ли запрос автономным или результатом операции eager load.

false

$_formatterssource

protected array

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

[]

$_mapReducesource

protected array

Список процедур map-reduce, которые должны быть применены к результатам запроса.

[]

$_optionssource

protected array

Содержит любые пользовательские параметры, переданные с помощью applyOptions, которые не могли быть обработаны каким-либо методом в этом классе.

[]

$_repositorysource

protected Cake\Datasource\RepositoryInterface

Экземпляр объекта таблицы, к которому привязан этот запрос.

$_resultssource

protected Cake\Datasource\ResultSetInterface

Объект ResultSet.

При установке выполнение запроса будет пропущено.

См.

Cake\Datasource\QueryTrait::setResult()

© 2005–2016 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.
http://api.cakephp.org/3.1/class-Cake.ORM.Query.html

Spec-Zone.ru

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