Класс Query
Расширяет базовый класс Query, добавляя новые методы, связанные с загрузкой ассоциаций, автоматическим выбором полей, автоматическим приведением типов и обертыванием результатов в определённый итератор, который будет отвечать за гидратацию результатов при необходимости.
- Cake\Database\Query implements Cake\Database\ExpressionInterface, IteratorAggregate uses Cake\Database\TypeMapTrait
-
Cake\ORM\Query implements JsonSerializable, Cake\Datasource\QueryInterface uses Cake\Datasource\QueryTrait
Подробное описание метода
__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При попытке кеширования запроса, не являющегося запросом на выборку.
cleanCopysource public
cleanCopy( )
Создаёт копию текущего запроса, запускает события перед поиском и сбрасывает некоторые состояния.
Следующие состояния будут очищены:
- autoFields
- limit
- offset
- функции map/reduce
- форматеры результатов
- order
- включения
Этот метод создаёт копии запросов, которые полезны при работе с подзапросами.
Возвращает
Cake\ORM\QueryCake\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(*) для запроса. Если запрос не был изменён, а счёт уже выполнен, возвращается кэшированное значение.
Возвращает
integerint
Реализация
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массив
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\Typebindsource 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 - имя условия, которое нужно вернуть
Возвращает
mixedmixed
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
executesource public
execute( )
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключение, настроенного в конфигурации. Возвращает объект результирующего оператора.
Выполнение запроса включает несколько этапов: сначала объект подключается к базе данных, чтобы адаптировать его к конкретному диалекту, что может привести к генерации другого объекта запроса, который будет фактически выполнен. Непосредственно после этого литеральные значения передаются подключению, чтобы безопасно связать их с запросом. Наконец, результирующий оператор дополняется пользовательскими объектами для выполнения обратных вызовов для каждой полученной строки при необходимости.
Результирующий оператор итерируемый, поэтому его можно использовать в любом цикле, как вы бы использовали массив.
Этот метод можно переопределить в подклассах запросов, чтобы настроить поведение при выполнении запроса.
Возвращает
Cake\Database\StatementInterfaceCake\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\TypeleftJoinsource 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\Typeordersource 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если вы пытаетесь установить значения до объявления столбцов. Или если вы пытаетесь установить значения в запросах, не являющихся запросами вставки.
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\TypeCake\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() для получения информации о параметрах, которые будут обработаны этим классом и не будут возвращены этой функцией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( )
Возвращает массив, представляющий результаты после выполнения запроса.
Возвращает
arrayarray
Реализация
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 |
Резюме свойств
Свойства, унаследованные от 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
Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего утверждения при извлечении. Каждая функция обратного вызова будет получать массив строки в качестве первого аргумента.
[]
$_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