Класс 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
См.: \Cake\Collection\CollectionInterface Для полного описания методов коллекции, поддерживаемых этим классом
Расположение: ORM/Query.php
Краткое описание констант
-
integer0 -
booleantrue -
integer1
Краткое описание свойств
-
$_autoFieldsprotectedbooleanОтслеживает, следует ли исходному запросу включать поля из таблицы верхнего уровня.
-
$_beforeFindFiredprotectedИстина, если событие beforeFind уже было вызвано для этого запросаboolean -
$_counterprotectedcallableВызываемая функция, которая может использоваться для вычисления общего количества записей, которые будет соответствовать этому запросу, если не используется
limit -
$_eagerLoaderprotectedЭкземпляр класса, отвечающего за хранение включений ассоциаций и за их нетерпеливую загрузку при выполнении этого запроса
-
$_hasFieldsprotectedbooleanВыбрал ли пользователь какие-либо поля до выполнения, это используется для определения того, следует ли автоматически выбирать какие-либо поля.
-
$_hydrateprotectedГидратировать ли результаты в объекты сущностейboolean -
$_resultsCountprotectedЗначение COUNT(*) для запроса.integer
Унаследованные свойства
-
_connection,_dirty,_functionsBuilder,_iterator,_parts,_resultDecorators,_selectTypeMap,_type,_typeCastAttached,_useBufferedResults,_valueBinder_typeMap_cache,_eagerLoaded,_formatters,_mapReduce,_options,_repository,_results
Краткое описание методов
- __call() public
- __clone() publicЗацепка для клонирования объекта.
- __construct() publicКонструктор
- __debugInfo() public
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
- _addAssociationsToTypeMap() protected
Используется для рекурсивного добавления типов столбцов связанных ассоциаций к запросу.
- _addDefaultFields() protected
Проверяет, есть ли какие-либо установленные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
- _addDefaultSelectTypes() protectedУстанавливает типы по умолчанию для преобразования полей в предложении SELECT
- _decorateResults() protectedДекорирует итератор результатов с помощью подпрограмм MapReduce и форматировщиков
- _dirty() protected
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэша в памяти, такую как предыдущие результаты
- _execute() protected
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для нетерпеливой загрузки глубоких ассоциаций.
- _performCount() protectedВыполняет и возвращает COUNT(*) для запроса.
- _transformQuery() protectedПрименяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
- addDefaultTypes() public
Подсказывает этому объекту связать правильные типы при приведении типов условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователем себя при указании условий.
- all() publicПолучить результаты этого запроса.
- applyOptions() public
Заполняет или добавляет части в текущие предложения запроса с помощью массива. Это удобно для передачи всех предложений запроса одновременно. Массив параметров принимает:
- autoFields() publicПолучить/Установить, следует ли ORM автоматически добавлять поля.
- cache() public
- cleanCopy() publicСоздает копию этого текущего запроса, запускает beforeFind и сбрасывает некоторое состояние.
- contain() public
Устанавливает список ассоциаций, которые должны быть нетерпеливо загружены вместе с этим запросом. Список переданных связанных таблиц должен быть предварительно установлен в качестве ассоциаций с использованием API таблицы.
- count() publicВозвращает общее количество результатов для запроса.
- counter() public
Регистрирует вызываемую функцию, которая будет выполняться, когда метод
countв этом запросе будет вызван. Возвращаемое значение функции будет установлено в качестве возвращаемого значения методаcount. - delete() publicСоздать запрос на удаление.
- eagerLoader() public
Устанавливает экземпляр класса загрузчика для использования при загрузке ассоциаций и хранении содержимого. Если вызывается без аргументов, он вернет текущий настроенный экземпляр.
- find() publicПрименить пользовательские поиски к существующему объекту запроса.
- hydrate() publicПереключение гидратации сущностей.
- innerJoinWith() public
Создает INNER JOIN с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и пользовательские условия, которые были первоначально установлены для нее.
- insert() publicСоздать запрос на вставку.
- jsonSerialize() publicВыполняет запрос и преобразует результирующий набор в JSON.
- leftJoinWith() public
Создает LEFT JOIN с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и пользовательские условия, которые были первоначально установлены для нее.
- matching() public
Добавляет условия фильтрации в этот запрос, чтобы получать только строки, имеющие отношение к другой из связанной таблицы, на основе условий в связанной таблице.
- notMatching() public
Добавляет условия фильтрации в этот запрос, чтобы получать только строки, которые не имеют соответствия другой из связанной таблицы, на основе условий в связанной таблице.
- select() public
Добавляет новые поля, которые будут возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
- sql() publicВозвращает SQL-представление этого объекта.
- triggerBeforeFind() publicЗапустить событие beforeFind в объекте репозитория запроса.
- update() publicСоздать запрос на обновление.
Method Detail
__call()source public
__call( $method , $arguments )
Исключения
BadMethodCallExceptionесли метод вызывается для запроса, отличного от select
__clone()source public
__clone( )
Зацепка для клонирования объекта.
Уничтожает внутренний итератор клонов и клонирует привязчик значений и экземпляры загрузчика.
Переопределяет
Cake\Database\Query::__clone() __construct()source public
__construct( Cake\Datasource\ConnectionInterface $connection , Cake\ORM\Table $table )
Конструктор
Параметры
-
Cake\Datasource\ConnectionInterface$connection - Объект соединения
-
Cake\ORM\Table$table - Таблица, с которой начинается этот запрос
Переопределяет
Cake\Database\Query::__construct() __debugInfo()source public
__debugInfo( )
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
Возвращает
arrayПереопределяет
Cake\Database\Query::__debugInfo() _addAssociationsToTypeMap()source protected
_addAssociationsToTypeMap( Cake\ORM\Table $table , Cake\Database\TypeMap $typeMap , array $associations )
Используется для рекурсивного добавления типов столбцов связанных ассоциаций к запросу.
Параметры
-
Cake\ORM\Table$table - Экземпляр таблицы для извлечения ассоциаций.
-
Cake\Database\TypeMap$typeMap Typemap для проверки столбцов. Этот typemap косвенно изменяется через Cake\ORM\Query::addDefaultTypes()
- array
$associations - Вложенное дерево ассоциаций для обхода.
_addDefaultFields()source protected
_addDefaultFields( )
Проверяет, есть ли какие-либо установленные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
_addDefaultSelectTypes()source protected
_addDefaultSelectTypes( )
Устанавливает типы по умолчанию для преобразования полей в предложении SELECT
_decorateResults()source protected
_decorateResults( Traversable $result )
Декорирует итератор результатов с помощью подпрограмм MapReduce и форматировщиков
Parameters
- Traversable
$result - Исходные результаты
Returns
Cake\Datasource\ResultSetInterface_dirty()source protected
_dirty( )
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэша в памяти, такую как предыдущие результаты
Overrides
Cake\Database\Query::_dirty() _execute()source protected
_execute( )
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для загрузки связанных данных.
Returns
Cake\ORM\ResultSet_performCount()source protected
_performCount( )
Выполняет и возвращает COUNT(*) для запроса.
Returns
integer_transformQuery()source protected
_transformQuery( )
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет соединения, необходимые для загрузки связанных данных, определенных с помощью contain
Он также устанавливает типы по умолчанию для столбцов в предложении select
See
\Cake\Database\Query::execute()addDefaultTypes()source public
addDefaultTypes( Cake\ORM\Table $table )
Подсказывает этому объекту связать правильные типы при приведении типов условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователем себя при указании условий.
Этот метод возвращает тот же объект запроса для цепочки вызовов.
Parameters
-
Cake\ORM\Table$table - Таблица, из которой нужно извлечь типы
Returns
$this
all()source public
all( )
Извлечь результаты для этого запроса.
Returns
Cake\Datasource\ResultSetInterfaceThrows
RuntimeExceptionесли этот метод вызывается для не-SELECT запроса.
Implementation of
Cake\Datasource\QueryInterface::all() applyOptions()source public
applyOptions( array $options )
Заполняет или добавляет части в текущие предложения запроса, используя массив. Это удобно для одновременной передачи всех предложений запроса. Массив options принимает:
Заполняет или добавляет части в текущие предложения запроса, используя массив. Это удобно для одновременной передачи всех предложений запроса. Массив options принимает:
- fields: Сопоставляется с методом select
- conditions: Сопоставляется с методом where
- limit: Сопоставляется с методом limit
- order: Сопоставляется с методом order
- offset: Сопоставляется с методом offset
- group: Сопоставляется с методом group
- having: Сопоставляется с методом having
- contain: Сопоставляется с параметрами contain для загрузки связанных данных
- join: Сопоставляется с методом join
- page: Сопоставляется с методом page
Example:
$query->applyOptions([
'fields' => ['id', 'name'],
'conditions' => [
'created >=' => '2013-01-01'
],
'limit' => 10
]); Эквивалентно:
$query ->select(['id', 'name']) ->where(['created >=' => '2013-01-01']) ->limit(10)
Parameters
- array
$options - Список предложений запроса для применения новых частей.
Returns
$this
Implementation of
Cake\Datasource\QueryInterface::applyOptions() autoFields()source public
autoFields( boolean|null $value null )
Получить/Установить, следует ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключит автоматические поля. Вы можете снова включить автоматические поля с помощью этого метода.
Parameters
- boolean|null
$valueoptional null - Значение для установки или null для чтения текущего значения.
Returns
boolean|Cake\ORM\Query$this Либо текущее значение, либо объект запроса.
cache()source public
cache( $key , $config 'default' )
Returns
$this
Throws
RuntimeExceptionКогда вы пытаетесь кэшировать не-SELECT запрос.
cleanCopy()source public
cleanCopy( )
Создает копию текущего запроса, вызывает beforeFind и сбрасывает некоторое состояние.
Следующее состояние будет очищено:
- autoFields
- limit
- offset
- функции map/reduce
- форматировщики результатов
- order
- containments
Этот метод создает клоны запросов, которые полезны при работе с вложенными запросами.
Returns
Cake\ORM\Querycontain()source public
contain( array|string|null $associations null , boolean $override false )
Устанавливает список ассоциаций, которые должны быть загружены вместе с этим запросом. Список переданных связанных таблиц должен быть предварительно установлен в качестве ассоциаций с помощью API таблицы.
Example:
// Bring articles' author information
$query->contain('Author');
// Also bring the category and tags associated to each article
$query->contain(['Category', 'Tag']); Ассоциации могут быть произвольно вложенными с использованием точечной нотации или вложенных массивов, это позволяет этому объекту вычислять соединения или любые дополнительные запросы, которые должны быть выполнены для получения необходимых связанных данных.
Example:
// 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'); Можно управлять условиями и полями, выбранными для каждой из содержащихся ассоциаций:
Example:
$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: Массив с полями, которые должны быть извлечены из ассоциации. -
finder: Finder, который нужно использовать при загрузке связанных записей. Либо имя finder как строка, либо массив для определения параметров, которые нужно передать в finder. -
queryBuilder: Эквивалентно передаче вызываемого объекта вместо массива параметров.
Example:
// Set options for the hasMany articles that will be eagerly loaded for an author
$query->contain([
'Articles' => [
'fields' => ['title', 'author_id']
]
]); Finders могут быть настроены для использования параметров.
// Retrieve translations for the articles, but only those for the `en` and `es` locales
$query->contain([
'Articles' => [
'finder' => [
'translations' => [
'locales' => ['en', 'es']
]
]
]
]); При содержании ассоциаций важно включать столбцы внешних ключей. В противном случае будут вызваны исключения.
// 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, предыдущий список будет очищен.
Parameters
- array|string|null
$associationsoptional null - Список псевдонимов таблиц, которые должны быть запрошены.
- boolean
$overrideoptional false Переопределяет ли предыдущий список переданным, по умолчанию объединяет предыдущий список с новым.
Returns
array|Cake\ORM\Query$this
count()source public
count( )
Возвращает общее количество результатов для запроса.
Возвращает COUNT(*) для запроса. Если запрос не был изменен и подсчет уже был выполнен, возвращается кэшированное значение
Returns
integerImplementation of
Cake\Datasource\QueryInterface::count() counter()source public
counter( callable|null $counter )
Регистрирует вызываемую функцию, которая будет выполнена, когда вызывается метод count в этом запросе. Возвращаемое значение функции будет установлено в качестве возвращаемого значения метода count.
Это особенно полезно, когда вам нужно оптимизировать запрос для возврата количества, например, удаление ненужных соединений, удаление группировки или просто возврат оценочного числа строк.
Обратный вызов получит в качестве первого аргумента клон этого запроса, а не сам запрос.
Если первый параметр имеет значение null, вместо этого будет вызвана встроенная функция счетчика
Parameters
- callable|null
$counter - Значение счетчика
Returns
$this
delete()source public
delete( string|null $table null )
Создать запрос на удаление.
Это изменяет тип запроса на 'delete'. Может быть объединен с методом where() для создания запросов на удаление.
Параметры
- string|null
$tableoptional null - Неиспользуемый параметр.
Возвращает
$this
Переопределяет
Cake\Database\Query::delete() eagerLoader()source public
eagerLoader( Cake\ORM\EagerLoader $instance null )
Устанавливает экземпляр класса загрузчика для использования при загрузке ассоциаций и хранении включений. Если вызывается без аргументов, он вернет текущий настроенный экземпляр.
Параметры
-
Cake\ORM\EagerLoader$instanceoptional null Загрузчик для использования. Передайте null, чтобы получить текущий загрузчик.
Возвращает
Cake\ORM\EagerLoader|Cake\ORM\Query$this
find()source public
find( string $finder , array $options [] )
Применить пользовательские поиски к существующему объекту запроса.
Параметры
- string
$finder - Метод поиска для использования.
- array
$optionsoptional [] - Параметры для поиска.
Возвращает
$this Возвращает измененный запрос.
См.
\Cake\ORM\Table::find()Реализация
Cake\Datasource\QueryInterface::find() hydrate()source public
hydrate( boolean|null $enable null )
Переключение гидратации сущностей.
Если установлено в false, будут возвращены результаты в виде массива
Параметры
- boolean|null
$enableoptional null Используйте логическое значение для установки режима гидратации. Null получит текущий режим гидратации.
Возвращает
boolean|Cake\ORM\Query$this Логическое значение при чтении и $this при установке режима.
innerJoinWith()source public
innerJoinWith( string $assoc , callable $builder null )
Создает INNER JOIN с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и настроенные условия, которые были изначально установлены для нее.
Эта функция добавит записи в граф 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
$builderoptional null Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$this
См.
\Cake\ORM\Query::matching()insert()source public
insert( array $columns , array $types [] )
Создать запрос на вставку.
Это изменяет тип запроса на 'insert'. Обратите внимание, что вызов этого метода сбросит все данные, ранее установленные с помощью Query::values()
Может быть объединен с методом where() для создания запросов на удаление.
Параметры
- array
$columns - Столбцы для вставки.
- array
$typesoptional [] - Сопоставление между столбцами и их типами данных.
Возвращает
$this
Вызывает исключение
RuntimeExceptionКогда нет столбцов.
Переопределяет
Cake\Database\Query::insert() jsonSerialize()source public
jsonSerialize( )
Выполняет запрос и преобразует результирующий набор в JSON.
Часть интерфейса JsonSerializable.
Возвращает
Cake\Datasource\ResultSetInterfaceДанные для преобразования в JSON.
Реализация
JsonSerializable::jsonSerialize() leftJoinWith()source 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
Можно выполнить левое соединение глубоких ассоциаций, используя точечную нотацию
Пример:
// 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. Если вы хотите добавить более сложные предложения, вы можете сделать это непосредственно в основном запросе.
Параметры
- string
$assoc - Ассоциация для соединения.
- callable
$builderoptional null Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$this
matching()source 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. Если вы хотите добавить более сложные предложения, вы можете сделать это непосредственно в основном запросе.
Параметры
- string
$assoc - Ассоциация для фильтрации.
- callable
$builderoptional null Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$this
notMatching()source 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. Если вы хотите добавить более сложные предложения, вы можете сделать это непосредственно в основном запросе.
Параметры
- string
$assoc - Ассоциация для фильтрации.
- callable
$builderoptional null Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$this
select()source 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.
Параметры
- array|
Cake\Database\ExpressionInterface|string|Cake\ORM\Table|Cake\ORM\Association$fieldsoptional [] Поля, которые нужно добавить в список.
- boolean
$overwriteoptional false - нужно ли сбросить поля переданным списком или нет
Возвращает
$this
Переопределяет
Cake\Database\Query::select() sql()source public
sql( Cake\Database\ValueBinder $binder null )
Возвращает SQL-представление этого объекта.
Parameters
- Cake\Database\ValueBinder
$binderoptional null $generator Объект-заполнитель, который будет содержать связанные значения для выражений
Returns
stringOverrides
Cake\Database\Query::sql() triggerBeforeFind()source public
triggerBeforeFind( )
Вызывает событие beforeFind в объекте репозитория запроса.
Будет вызвано не более одного раза и только для запросов select.
update()source public
update( string|null $table null )
Создает запрос обновления.
Это изменяет тип запроса на 'update'. Может быть объединен с методами set() и where() для создания запросов обновления.
Parameters
- string|null
$tableoptional null - Неиспользуемый параметр.
Returns
$this
Overrides
Cake\Database\Query::update() Методы, унаследованные от Cake\Database\Query
__toString()source public
__toString( )
Возвращает строковое представление этого запроса (полное SQL-выражение).
Returns
string_conjugate()source protected
_conjugate( string $part , string|null|array|Cake\Database\ExpressionInterface|callable $append , string $conjunction , array $types )
Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.
Parameters
- string
$part - Имя части запроса, к которой нужно добавить новую часть
- string|null|array|
Cake\Database\ExpressionInterface|callable$append - Выражение или функция построения для добавления.
- string
$conjunction - тип конъюнкции, который будет использоваться для обработки части
- array
$types - ассоциативный массив имен типов, используемых для привязки значений к запросу
_decorateStatement()source protected
_decorateStatement( Cake\Database\StatementInterface $statement )
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.
Parameters
-
Cake\Database\StatementInterface$statement - для декорирования
Returns
Cake\Database\Statement\CallbackStatement_makeJoin()source protected
_makeJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions , string $type )
Возвращает массив, который может быть передан в метод join, описывающий одно условие соединения
Parameters
- string|array
$table - Таблица для соединения
- string|array|
Cake\Database\ExpressionInterface$conditions Условия для использования при соединении.
- string
$type - тип соединения, который нужно использовать
Returns
arrayandHaving()source public
andHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )
Соединяет любой ранее определенный набор условий с предоставленным списком, используя оператор AND в предложении HAVING. Этот метод работает точно так же, как метод andWhere() . Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Parameters
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условия AND для HAVING.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Returns
$this
See
\Cake\Database\Query::andWhere()andWhere()source public
andWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )
Соединяет любой ранее определенный набор условий с предоставленным списком, используя оператор AND. Эта функция принимает список условий в том же формате, что и метод where , поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно отметить, что при вызове этой функции любой предыдущий набор условий, определенных для этого запроса, будет рассматриваться как один аргумент для оператора AND. Эта функция будет обрабатывать не только последнее определенное условие, но и все условия в целом.
При использовании массива для определения условий создание ограничений для каждой записи массива будет использовать ту же логику, что и функция where() . Это означает, что каждая запись массива будет присоединена к другой с использованием оператора AND, если вы не вложите условия в массив, используя другой оператор.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Выведет:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Выведет:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->add(['author_id' => 1])
->or_(['author_id' => 2]);
}); Генерирует следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Parameters
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условия для добавления с AND.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Returns
$this
See
\Cake\Database\Query::where()Cake\Database\Typebind()source public
bind( string|integer $param , mixed $value , string|integer $type 'string' )
Связывает заполнитель запроса со значением и типом.
Если тип выражается как "atype[]" (обратите внимание на скобки), это приведет к динамическому переписыванию заполнителя, поэтому, если значение является массивом, он создаст столько заполнителей, сколько в нем значений. Например:
$query->bind(':id', [1, 2, 3], 'int[]'); Создаст 3 заполнителя типа int. При использовании именованных заполнителей этот метод требует, чтобы заполнители включали : например :value.
Parameters
- string|integer
$param заполнитель, который будет заменен на кавычатую версию $value
- mixed
$value - Значение, которое нужно связать
- string|integer
$typeoptional 'string' имя сопоставленного типа, используемое для приведения типов при отправке в базу данных
Returns
$this
bufferResults()source public
bufferResults( boolean|null $enable null )
Включить/Выключить буферизованные результаты.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно перебирать набор результатов или кэшировать и перебирать его.
При выключении он будет потреблять меньше памяти, так как извлеченные результаты не запоминаются для будущих итераций.
Если вызывается без аргументов, он вернет, включено ли буферирование или нет.
Parameters
- boolean|null
$enableoptional null - включать ли буферизацию
Returns
boolean|Cake\Database\Query$this
clause()source public
clause( string $name )
Возвращает любые данные, которые были сохранены в указанном предложении. Это полезно для изменения любой внутренней части запроса, и используется диалектами SQL для соответствующего преобразования запроса перед его выполнением. Допустимые предложения, которые можно получить: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
Возвращаемое значение для каждой из этих частей может меняться. Некоторые предложения используют QueryExpression для внутреннего хранения своего состояния, некоторые используют массивы, а другие могут использовать булевы значения или целые числа. Это сводка типов возвращаемых значений для каждого предложения.
- update: string Имя таблицы для обновления
- set: QueryExpression
- insert: array, вернет массив, содержащий таблицу + столбцы.
- values: ValuesExpression
- select: array, вернет пустой массив, когда поля не установлены
- distinct: boolean
- from: массив таблиц
- join: array
- set: array
- where: QueryExpression, возвращает null, когда не установлен
- group: array
- having: QueryExpression, возвращает null, когда не установлен
- order: OrderByExpression, возвращает null, когда не установлен
- limit: integer или QueryExpression, null, когда не установлен
- offset: integer или QueryExpression, null, когда не установлен
- union: array
Parameters
- string
$name - имя предложения, которое нужно вернуть
Returns
mixedconnection()source public
connection( Cake\Datasource\ConnectionInterface|null $connection null )
Задает экземпляр соединения, который будет использоваться для выполнения и преобразования этого запроса. При вызове с нулевым аргументом он вернет текущий экземпляр соединения.
Parameters
-
Cake\Datasource\ConnectionInterface|null$connectionoptional null - instance
Returns
$this|\Cake\Datasource\ConnectionInterface
decorateResults()source public
decorateResults( callable|null $callback , boolean $overwrite false )
Регистрирует обратный вызов, который будет выполнен для каждого результата, извлекаемого из результирующего набора. Функция обратного вызова получит в качестве первого параметра массив с необработанными данными из базы данных для каждой извлекаемой строки и должна вернуть строку с любыми возможными изменениями.
Обратные вызовы будут выполняться лениво. Если из базы данных извлекается только 3 строки, он будет вызван 3 раза, даже если в курсоре могут быть еще строки для извлечения.
Обратные вызовы упорядочиваются в порядке их регистрации. Если вы хотите сбросить стек, вызовите эту функцию со вторым параметром, установленным в true.
Если вы хотите удалить все декораторы из стека, установите первый параметр в null, а второй — в true.
Example
$query->decorateResults(function ($row) {
$row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
return $row;
}); Parameters
- callable|null
$callback - Обратный вызов, который нужно вызвать при извлечении результатов.
- boolean
$overwriteoptional false - Следует ли добавлять или заменять все существующие декораторы.
Returns
$this
distinct()source public
distinct( array|Cake\Database\ExpressionInterface|string|boolean $on [] , boolean $overwrite false )
Добавляет к запросу предложение DISTINCT для удаления дубликатов из результирующего набора. Это предложение можно использовать только для инструкций select.
Если вы хотите фильтровать дубликаты на основе строк, имеющих общее поле или набор полей, вы можете передать массив полей для фильтрации. Имейте в виду, что эта опция может быть не полностью поддерживаться во всех системах баз данных.
Examples:
// 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); Parameters
- array|
Cake\Database\ExpressionInterface|string|boolean$onoptional [] Включить/отключить класс distinct или список полей для фильтрации
- boolean
$overwriteoptional false - сбрасывать ли поля с переданным списком или нет
Returns
$this
epilog()source public
epilog( string|Cake\Database\Expression\QueryExpression|null $expression null )
Строка или выражение, которые будут добавлены к сгенерированному запросу
Examples:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Parameters
- string|
Cake\Database\Expression\QueryExpression|null$expressionoptional null - Выражение, которое будет добавлено
Returns
$this
execute()source public
execute( )
Компилирует SQL-представление этого запроса и выполняет его с использованием настроенного объекта соединения. Возвращает результирующий объект инструкции.
Выполнение запроса внутренне выполняет несколько шагов. Первый — это предоставление соединению возможности преобразовать этот объект в соответствии с его конкретным диалектом. Это может привести к созданию другого объекта Query, который будет фактически выполнен. Сразу после этого литеральные значения передаются в соединение, чтобы они были безопасно привязаны к запросу. Наконец, результирующее утверждение украшается пользовательскими объектами для выполнения обратных вызовов для каждой извлеченной строки, если необходимо.
Результирующее утверждение является проходимым, поэтому его можно использовать в любом цикле, как и массив.
Этот метод может быть переопределен в подклассах запросов для украшения поведения вокруг выполнения запроса.
Returns
Cake\Database\StatementInterfacefrom()source public
from( array|string $tables [] , boolean $overwrite false )
Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передается массив, ключи будут использоваться для присвоения псевдонимов таблицам, используя значение в качестве реального поля, которому будет присвоен псевдоним. Можно присваивать псевдонимы строкам, объектам ExpressionInterface или даже другим объектам Query.
По умолчанию эта функция будет добавлять любой переданный аргумент в список таблиц, из которых будет производиться выборка, если только второй аргумент не установлен в true.
Этот метод можно использовать для инструкций select, update и delete.
Examples:
$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 Parameters
- array|string
$tablesoptional [] таблицы, которые нужно добавить в список. Этот аргумент может быть передан как массив строк, массив объектов выражений или одна строка. См. примеры выше для допустимых типов вызова.
- boolean
$overwriteoptional false - сбрасывать ли таблицы с переданным списком или нет
Returns
$this
func()source public
func( )
Возвращает экземпляр объекта строителя функций, который можно использовать для генерации произвольных функций SQL.
Example:
$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02']) Returns
Cake\Database\FunctionsBuildergetIterator()source public
getIterator( )
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости вызывать execute() вручную, что делает его похожим на результирующий набор, а не на сам запрос.
Returns
IteratorImplementation of
IteratorAggregate::getIterator() group()source public
group( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite false )
Добавляет одно или несколько полей, которые будут использоваться в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей для группировки, если только второй аргумент не установлен в true.
Examples:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Parameters
- array|
Cake\Database\ExpressionInterface|string$fields - поля, которые нужно добавить в список
- boolean
$overwriteoptional false - сбрасывать ли поля с переданным списком или нет
Returns
$this
having()source public
having( string|array|Cake\Database\ExpressionInterface|callable|null $conditions null , array $types [] , boolean $overwrite false )
Добавляет условие или набор условий, которые будут использоваться в предложении HAVING для этого запроса. Этот метод работает точно так же, как метод where() . Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Parameters
- string|array|
Cake\Database\ExpressionInterface|callable|null$conditionsoptional null - Условия having.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- boolean
$overwriteoptional false - сбрасывать ли условия с переданным списком или нет
Returns
$this
See
\Cake\Database\Query::where()innerJoin()source public
innerJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions [] , array $types [] )
Добавляет одно предложение INNER JOIN к запросу.
Это сокращенный метод для построения соединений через join().
Аргументы этого метода идентичны сокращенному методу leftJoin() , обратитесь к описанию этого метода для получения дополнительных сведений.
Parameters
- string|array
$table - Таблица, к которой нужно присоединиться
- string|array|
Cake\Database\ExpressionInterface$conditionsoptional [] Условия, которые нужно использовать для соединения.
- array
$typesoptional [] список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Returns
$this
into()source public
into( string $table )
Устанавливает имя таблицы для запросов insert.
Parameters
- string
$table - Имя таблицы, в которую нужно вставить.
Returns
$this
join()source public
join( array|string|null $tables null , array $types [] , boolean $overwrite false )
Добавляет одну или несколько таблиц для использования в качестве предложений JOIN к этому запросу. Таблицы могут быть переданы в виде массива строк, массива, описывающего части соединения, массива с несколькими описаниями соединений или одной строки.
По умолчанию эта функция добавит любой переданный аргумент в список таблиц, которые нужно соединить, если только третий аргумент не установлен в true.
Если тип соединения не указан, по умолчанию используется INNER JOIN: $query->join(['authors']) приведет к INNER JOIN authors ON 1 = 1
Также можно использовать псевдонимы для соединений, используя ключ массива: $query->join(['a' => 'authors'])`` will produceINNER JOIN authors a ON 1 = 1`
Соединение может быть полностью описано и иметь псевдоним, используя обозначение массива:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id Можно даже указать несколько соединений в массиве, включая полное описание:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
],
'p' => [
'table' => 'publishers',
'type' => 'INNER',
'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation" Использование условий и типов
Условия могут быть выражены, как в примерах выше, используя строку для сравнения столбцов или строку с уже процитированными литеральными значениями. Кроме того, можно использовать условия, выраженные в массивах или объектах выражений.
При использовании массивов для выражения условий часто желательно преобразовать литеральные значения в правильное представление базы данных. Это достигается с помощью второго параметра этой функции.
$query->join(['a' => [
'table' => 'articles',
'conditions' => [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean']) Перезапись соединений
При создании соединений с псевдонимами, используя обозначение массива, можно переопределить предыдущие определения соединений, используя тот же псевдоним в последующих вызовах этой функции, или можно заменить все ранее определенные соединения другим списком, если третий параметр этой функции установлен в true.
$query->join(['alias' => 'table']); // joins table with as alias $query->join(['alias' => 'another_table']); // joins another_table with as alias $query->join(['something' => 'different_table'], [], true); // resets joins list
Параметры
- array|string|null
$tablesoptional null - список таблиц, которые должны быть объединены в запросе
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- boolean
$overwriteoptional false - необходимо ли сбросить соединения с переданным списком или нет
Возвращает
$this
См. также
Cake\Database\TypeleftJoin()source public
leftJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions [] , array $types [] )
Добавляет одно предложение LEFT JOIN к запросу.
Это сокращенный метод для построения соединений через join().
Имя таблицы может быть передано как строка или как массив, если ему нужно дать псевдоним:
// LEFT JOIN authors ON authors.id = posts.author_id
$query->leftJoin('authors', 'authors.id = posts.author_id');
// LEFT JOIN authors a ON a.id = posts.author_id
$query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id'); Условия могут быть переданы как строки, массивы или объекты выражений. При использовании массивов их можно комбинировать с параметром $types для определения способа преобразования значений:
$query->leftJoin(['a' => 'articles'], [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
], ['a.posted' => 'datetime', 'a.published' => 'boolean']); См. join() для получения дополнительной информации об условиях и типах.
Параметры
- string|array
$table - Таблица, к которой нужно присоединиться
- string|array|
Cake\Database\ExpressionInterface$conditionsoptional [] Условия, которые нужно использовать для соединения.
- array
$typesoptional [] список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
limit()source public
limit( integer|Cake\Database\ExpressionInterface $num )
Задает количество записей, которые должны быть получены из базы данных, принимает целое число или объект выражения, который вычисляется в целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера результирующего набора.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
- integer|
Cake\Database\ExpressionInterface$num - количество записей, которые должны быть возвращены
Возвращает
$this
modifier()source public
modifier( array|Cake\Database\ExpressionInterface|string $modifiers , boolean $overwrite false )
Добавляет один или несколько модификаторов SELECT для использования в предложении SELECT.
По умолчанию эта функция добавит любой переданный аргумент в список модификаторов, которые нужно применить, если только второй аргумент не установлен в true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
- array|
Cake\Database\ExpressionInterface|string$modifiers - модификаторы, которые должны быть применены к запросу
- boolean
$overwriteoptional false - необходимо ли сбросить порядок со списком полей или нет
Возвращает
$this
newExpr()source public
newExpr( mixed $rawExpression null )
Возвращает новый объект QueryExpression. Это удобная функция при построении сложных запросов с использованием гибкого интерфейса. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
Необязательно можно передать одну необработанную строку SQL или массив выражений в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
- mixed
$rawExpressionoptional null - Строка, массив или что-либо еще, что вы хотите обернуть в объект выражения
Возвращает
Cake\Database\Expression\QueryExpressionoffset()source public
offset( integer|Cake\Database\ExpressionInterface $num )
Задает количество записей, которые должны быть пропущены из исходного результирующего набора. Это обычно используется для постраничной обработки больших результатов. Принимает целое число или объект выражения, который вычисляется в целое число.
В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера результирующего набора.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
- integer|
Cake\Database\ExpressionInterface$num - количество записей, которые должны быть пропущены
Возвращает
$this
orHaving()source public
orHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )
Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор OR в предложении HAVING. Этот метод работает точно так же, как метод orWhere(). Обратитесь к его документации, чтобы понять, как использовать каждый параметр.
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условия OR для HAVING.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу.
Возвращает
$this
См. также
\Cake\Database\Query::orWhere()orWhere()source public
orWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )
Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор OR. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно отметить, что при вызове этой функции любой предыдущий набор условий, определенных для этого запроса, будет рассматриваться как единственный аргумент для оператора OR. Эта функция будет работать не только с самым недавно определенным условием, но и со всеми условиями в целом.
При использовании массива для определения условий создание ограничений для каждой записи массива будет использовать ту же логику, что и функция where(). Это означает, что каждая запись массива будет соединена с другой с помощью оператора OR, если только вы не вложите условия в массив, используя другой оператор.
Примеры:
$query->where(['title' => 'Hello World')->orWhere(['title' => 'Foo']);
Приведет к:
WHERE title = 'Hello World' OR title = 'Foo'
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->orWhere(['author_id' => 1, 'comments_count >' => 10])
Выдаст:
WHERE (published = 0 OR published IS NULL) OR (author_id = 1 AND comments_count > 10)
$query
->where(['title' => 'Foo'])
->orWhere(function ($exp, $query) {
return $exp
->add(['author_id' => 1])
->or_(['author_id' => 2]);
}); Сгенерирует следующие условия:
WHERE (title = 'Foo') OR (author_id = 1 OR author_id = 2)
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условия, которые нужно добавить с помощью OR.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::where()Cake\Database\Typeorder()source public
order( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite false )
Добавляет одно или несколько полей для использования в предложении ORDER для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передается массив, ключи будут использоваться в качестве самого поля, а значение будет представлять порядок, в котором это поле должно быть упорядочено. При многократном вызове с теми же полями в качестве ключа последнее определение порядка будет иметь приоритет над другими.
По умолчанию эта функция добавит любой переданный аргумент в список полей, которые нужно выбрать, если только второй аргумент не установлен в true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Выдаст:
ORDER BY title DESC, author_id ASC
$query->order(['title' => 'DESC NULLS FIRST'])->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
Станет:
ORDER BY (id %2 = 0), title ASC
Если вам нужно установить сложные выражения в качестве условий сортировки, вы должны использовать orderAsc() или orderDesc().
Параметры
- array|
Cake\Database\ExpressionInterface|string$fields - поля, которые нужно добавить в список
- boolean
$overwriteoptional false - необходимо ли сбросить порядок со списком полей или нет
Возвращает
$this
orderAsc()source public
orderAsc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite false )
Добавить предложение ORDER BY с направлением ASC.
Этот метод позволяет устанавливать сложные выражения в качестве условий сортировки в отличие от order()
Parameters
- string|
Cake\Database\Expression\QueryExpression$field - Поле для сортировки.
- boolean
$overwriteoptional false - Сбрасывать ли предложения сортировки.
Returns
$this
orderDesc()source public
orderDesc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite false )
Добавить предложение ORDER BY с направлением DESC.
Этот метод позволяет устанавливать сложные выражения в качестве условий сортировки в отличие от order()
Parameters
- string|
Cake\Database\Expression\QueryExpression$field - Поле для сортировки.
- boolean
$overwriteoptional false - Сбрасывать ли предложения сортировки.
Returns
$this
page()source public
page( integer $num , integer|null $limit null )
Установить номер страницы результатов.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit будет по умолчанию использовать существующее предложение limit, а если и оно пусто, то будет использоваться 25.
Нумерация страниц начинается с 1.
Parameters
- integer
$num - Номер нужной страницы.
- integer|null
$limitoptional null Количество строк на странице. Если null, будет использоваться текущее предложение limit.
Returns
$this
removeJoin()source public
removeJoin( string $name )
Удалить соединение, если оно было определено.
Полезно, когда вы переопределяете соединения или хотите изменить порядок предложений соединения.
Parameters
- string
$name - Псевдоним/имя соединения для удаления.
Returns
$this
rightJoin()source public
rightJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions [] , array $types [] )
Добавляет одно предложение RIGHT JOIN к запросу.
Это сокращенный метод для построения соединений через join().
Аргументы этого метода идентичны сокращенному методу leftJoin(), обратитесь к описанию этого метода для получения дополнительной информации.
Parameters
- string|array
$table - Таблица для соединения.
- string|array|
Cake\Database\ExpressionInterface$conditionsoptional [] Условия для соединения.
- array
$typesoptional [] Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Returns
$this
selectTypeMap()source public
selectTypeMap( Cake\Database\TypeMap $typeMap null )
Устанавливает класс TypeMap, где хранятся типы для каждого из полей в предложении select.
При вызове без аргументов возвращается текущий объект TypeMap.
Parameters
-
Cake\Database\TypeMap$typeMapoptional null - Объект карты для использования
Returns
$this|\Cake\Database\TypeMap
set()source public
set( string|array|callable|Cake\Database\Expression\QueryExpression $key , mixed $value null , array $types [] )
Установить одно или несколько полей для обновления.
Examples
Передача строки:
$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');
}); Parameters
- string|array|callable|
Cake\Database\Expression\QueryExpression$key Имя столбца или массив ключей + значений для установки. Это также может быть QueryExpression, содержащий фрагмент SQL. Это также может быть вызываемый объект, который должен возвращать объект выражения.
- mixed
$valueoptional null Значение для обновления $key. Может быть null, если $key является массивом или QueryExpression. Когда $key является массивом, этот параметр будет использоваться как $types.
- array
$typesoptional [] - Типы столбцов для обработки данных.
Returns
$this
traverse()source public
traverse( callable $visitor , array $parts [] )
Будет итерироваться по каждой указанной части. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция обычно используется как способ обхода всех частей запроса, которые будут использоваться для построения запроса.
Обратный вызов получит 2 параметра: первый - значение части запроса, которая обрабатывается, а второй - имя этой части.
Example:
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Parameters
- callable
$visitor - Функция или вызываемый объект, который будет выполнен для каждой части
- array
$partsoptional [] - Предложения запроса для обхода
Returns
$this
Implementation of
Cake\Database\ExpressionInterface::traverse() traverseExpressions()source public
traverseExpressions( callable $callback )
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход в глубину всего дерева выражений. Это выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, который хранится в этом запросе на любой глубине вложенности в любой части запроса.
Обратный вызов получит в качестве первого параметра текущее посещаемое выражение.
Parameters
- callable
$callback функция, которая будет выполнена для каждого найденного ExpressionInterface в этом запросе.
Returns
$this|null
type()source public
type( )
Возвращает тип этого запроса (select, insert, update, delete)
Returns
stringunion()source public
union( string|Cake\Database\Query $query , boolean $overwrite false )
Добавляет полный запрос, который будет использоваться вместе с оператором UNION с этим запросом. Это используется для объединения результирующего набора этого запроса с тем, который будет возвращен переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызвав этот метод несколько раз с разными запросами.
По умолчанию оператор UNION удалит повторяющиеся строки. Если вы хотите включить каждую строку для всех запросов, используйте unionAll().
Examples
$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
Parameters
- string|
Cake\Database\Query$query - полный SQL-запрос для использования в операторе UNION
- boolean
$overwriteoptional false - сбрасывать ли список запросов или нет
Returns
$this
unionAll()source public
unionAll( string|Cake\Database\Query $query , boolean $overwrite false )
Добавляет полный запрос, который будет использоваться вместе с оператором UNION ALL с этим запросом. Это используется для объединения результирующего набора этого запроса с тем, который будет возвращен переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызвав этот метод несколько раз с разными запросами.
В отличие от UNION, UNION ALL не будет удалять повторяющиеся строки.
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
Результат:
SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a
Parameters
- string|
Cake\Database\Query$query - полный SQL-запрос для использования в операторе UNION
- boolean
$overwriteoptional false - сбрасывать ли список запросов или нет
Returns
$this
valueBinder()source public
valueBinder( Cake\Database\ValueBinder|null $binder null )
Возвращает текущий используемый экземпляр ValueBinder. Если передано значение, оно будет установлено в качестве нового экземпляра для использования.
ValueBinder отвечает за генерацию заполнителей запроса и временное связывание значений с этими заполнителями, чтобы их можно было правильно передать объекту statement.
Parameters
- Cake\Database\ValueBinder|null
$binderoptional null новый экземпляр для установки. Если значение не передано, будет возвращен экземпляр по умолчанию
Returns
$this|\Cake\Database\ValueBinder
values()source public
values( array|Cake\Database\Query $data )
Задает значения для запроса вставки.
Вставки нескольких записей могут быть выполнены путем вызова values() более одного раза или путем предоставления массива наборов значений. Кроме того, $data может быть экземпляром Query для вставки данных из другого оператора SELECT.
Parameters
- array|
Cake\Database\Query$data - Данные для вставки.
Returns
$this
Throws
Cake\Database\Exceptionесли вы пытаетесь установить значения до объявления столбцов. Или если вы пытаетесь установить значения для не вставляющих запросов.
where()source public
where( string|array|Cake\Database\ExpressionInterface|callable|null $conditions null , array $types [] , boolean $overwrite false )
Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нем, значения массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждая запись будет присоединена к остальным условиям с использованием оператора AND. Последовательные вызовы этой функции также будут присоединять новые указанные условия с использованием оператора AND. Кроме того, значения могут быть выражены с помощью объектов выражений, которые могут включать другие объекты запросов.
Любые условия, созданные с помощью этих методов, могут использоваться с любыми типами запросов SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример дает:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания того, какой тип ожидается для каждого переданного ключа. Допустимые типы могут быть использованы из сопоставленного с классом Database\Type.
Вложение условий с помощью союзов:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример дает:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия с помощью союзов столько, сколько хотите. Иногда вы можете захотеть определить 2 различных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Помните, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он будет присоединять переданные условия к предыдущему сохраненному списку с использованием оператора AND. Кроме того, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не будет перезаписывать предыдущее значение.
Использование объектов выражений:
$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp); Предыдущий пример дает:
WHERE (id != 100 OR author_id != 1) AND published = 1
Другие объекты Query, которые могут использоваться в качестве условий для любого поля.
Добавление условий в несколько шагов:
Вы можете использовать вызываемые функции для построения сложных выражений, функции получают в качестве первого аргумента новый объект QueryExpression и этот экземпляр запроса в качестве второго аргумента. Функции должны возвращать объект выражения, который будет добавлен в список условий для запроса с использованием оператора AND.
$query
->where(['title !=' => 'Hello World'])
->where(function ($exp, $query) {
$or = $exp->or_(['id' => 1]);
$and = $exp->and_(['id >' => 2, 'id <' => 10]);
return $or->add($and);
}); - Предыдущий пример дает:
WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))
Условия как строки:
$query->where(['articles.author_id = authors.id', 'modified IS NULL']);
Предыдущий пример дает:
WHERE articles.author_id = authors.id AND modified IS NULL
Обратите внимание, что при использовании обозначений массива или объектов выражений все значения будут правильно заключены в кавычки и автоматически преобразованы в соответствующий тип данных базы данных, тем самым обеспечивая безопасность вашего приложения от SQL-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Самое безопасное, что вы можете сделать, это никогда не использовать строковые условия.
Parameters
- string|array|
Cake\Database\ExpressionInterface|callable|null$conditionsoptional null - Условия для фильтрации.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- boolean
$overwriteoptional false - необходимо ли сбросить условия с переданным списком или нет
Returns
$this
See
Cake\Database\TypeCake\Database\Expression\QueryExpressionМетоды, используемые из Cake\Datasource\QueryTrait
_decoratorClass()source protected
_decoratorClass( )
Возвращает имя класса, который будет использоваться для декорирования результатов
Returns
stringaliasField()source public
aliasField( string $field , string|null $alias null )
Возвращает массив ключ => значение, представляющий одно поле с псевдонимом, которое может быть передано непосредственно в метод select(). Ключ будет содержать псевдоним, а значение - фактическое имя поля.
Если поле уже имеет псевдоним, оно не будет изменено. Если псевдоним $alias не передан, будет использоваться таблица по умолчанию для этого запроса.
Parameters
- string
$field - Поле для псевдонима
- string|null
$aliasoptional null - псевдоним, используемый для добавления префикса к полю
Returns
arrayaliasFields()source public
aliasFields( array $fields , string|null $defaultAlias null )
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в одном массиве.
Parameters
- array
$fields - Поля для псевдонимов
- string|null
$defaultAliasoptional null - Псевдоним по умолчанию
Returns
arrayeagerLoaded()source public
eagerLoaded( boolean|null $value null )
Устанавливает экземпляр запроса как запрос с нетерпеливой загрузкой. Если аргумент не передан, возвращается текущее настроенное значение параметра запроса _eagerLoaded.
Parameters
- boolean|null
$valueoptional null - Необходимо ли выполнять нетерпеливую загрузку.
Returns
$this|\Cake\ORM\Query
first()source public
first( )
Возвращает первый результат выполнения этого запроса, если запрос не был выполнен ранее, он установит предложение limit на 1 для повышения производительности.
Example:
$singleUser = $query->select(['id', 'username'])->first();
Returns
mixedпервый результат из ResultSet
firstOrFail()source public
firstOrFail( )
Получить первый результат из выполняющегося запроса или вызвать исключение.
Returns
mixedПервый результат из ResultSet.
Throws
Cake\Datasource\Exception\RecordNotFoundExceptionКогда нет первой записи.
formatResults()source public
formatResults( callable $formatter null , boolean|integer $mode 0 )
Регистрирует новую функцию обратного вызова форматирования, которая должна выполняться при попытке извлечения результатов из базы данных.
Функции обратного вызова форматирования получат первый параметр, ResultSetDecorator, который можно просматривать и изменять по своему усмотрению.
Функции обратного вызова должны возвращать объект итератора, который будет использоваться в качестве возвращаемого значения для результата этого запроса. Функции форматирования применяются после выполнения всех MapReduce процедур для этого запроса.
Если первый аргумент установлен в null, он вернет список ранее зарегистрированных процедур map reduce.
Если второй аргумент установлен в true, он сотрет предыдущие средства форматирования и заменит их переданным первым аргументом.
Example:
// 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;
});
}); Parameters
- callable
$formatteroptional null - Вызываемый объект форматирования.
- boolean|integer
$modeoptional 0 - Перезаписывать ли, добавлять или добавлять в начало средство форматирования.
Returns
$this|array
getIterator()source public
getIterator( )
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости ручного вызова execute(), благодаря чему он выглядит как набор результатов, а не сам запрос.
Returns
IteratorgetOptions()source public
getOptions( )
Возвращает массив с пользовательскими параметрами, которые были применены к этому запросу и которые еще не были обработаны другим методом в этом классе.
Example:
$query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']); $query->getOptions(); // Returns ['doABarrelRoll' => true]
Returns
arraySee
\Cake\ORM\Query::applyOptions() чтобы прочитать о параметрах, которые будут обработаны этим классом и не будут возвращены этой функцией
mapReduce()source public
mapReduce( callable $mapper null , callable $reducer null , boolean $overwrite false )
Регистрирует новую подпрограмму MapReduce для выполнения поверх результатов базы данных. И вызываемый объект mapper, и вызываемый объект caller должны быть вызываемыми объектами.
Маршрутизация MapReduce будет выполняться только при выполнении запроса и попытке получения первого результата.
Если первый аргумент установлен в null, он вернет список ранее зарегистрированных подпрограмм map reduce.
Если третий аргумент установлен в true, он сотрет предыдущие map reducers и заменит их переданными аргументами.
Параметры
- callable
$mapperoptional null - Вызываемый объект mapper.
- callable
$reduceroptional null - Функция редукции.
- boolean
$overwriteoptional false - Установите в true, чтобы перезаписать существующие функции map + reduce.
Возвращает
$this|array
См.
\Cake\Collection\Iterator\MapReduce для подробной информации о том, как использовать данные emit для map reducer.repository()source public
repository( Cake\Datasource\RepositoryInterface $table null )
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в предложении from.
При вызове с аргументом Table, объект таблицы по умолчанию будет установлен, и этот объект запроса будет возвращен для цепочки вызовов.
Параметры
-
Cake\Datasource\RepositoryInterface$tableoptional null - Объект таблицы по умолчанию для использования
Возвращает
Cake\Datasource\RepositoryInterface|Cake\Datasource\QueryTrait$this
setResult()source public
setResult( Cake\Datasource\ResultSetInterface $results )
Устанавливает результирующий набор для запроса.
Установка результирующего набора запроса сделает execute() операцией без действия. Вместо выполнения SQL-запроса и извлечения результатов будет возвращен ResultSet, предоставленный этому методу.
Этот метод наиболее полезен в сочетании с результатами, хранящимися в постоянном кэше.
Параметры
-
Cake\Datasource\ResultSetInterface$results - Результаты, которые должен возвращать этот запрос.
Возвращает
$this Экземпляр запроса.
toArray()source public
toArray( )
Возвращает представление результатов в виде массива после выполнения запроса.
Возвращает
arrayИспользуемые методы из Cake\Database\TypeMapTrait
defaultTypes()source public
defaultTypes( array $types null )
Позволяет устанавливать типы по умолчанию при цепочке запросов
Параметры
- array
$typesoptional null - Массив типов для установки.
Возвращает
$this|array
typeMap()source public
typeMap( array|Cake\Database\TypeMap|null $typeMap null )
Создает новый TypeMap, если $typeMap является массивом, в противном случае возвращает существующий тип карты или обменивает его на заданный.
Параметры
- array|
Cake\Database\TypeMap|null$typeMapoptional null - Создает TypeMap, если массив, в противном случае устанавливает заданный TypeMap
Возвращает
$this|\Cake\Database\TypeMap
Краткое описание магических методов
Подробное описание свойств
$_autoFieldssource
protected boolean
Отслеживает, следует ли включать поля из таблицы верхнего уровня в исходный запрос.
$_beforeFindFiredsource
protected boolean
True, если событие beforeFind уже было вызвано для этого запроса
false
$_countersource
protected callable
Вызываемая функция, которая может использоваться для вычисления общего количества записей, которые будет соответствовать этому запросу, если не используется limit
$_eagerLoadersource
protected Cake\ORM\EagerLoader
Экземпляр класса, ответственного за хранение включений ассоциаций и за их нетерпеливую загрузку при выполнении этого запроса
$_hasFieldssource
protected boolean
Выбрал ли пользователь какие-либо поля до выполнения, это используется для определения того, следует ли автоматически выбирать какие-либо поля.
$_resultsCountsource
protected integer
COUNT(*) для запроса.
При установке выполнение запроса count будет пропущено.
© 2005–2017 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.3/class-Cake.ORM.Query.html