Класс 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 Для полного описания методов коллекции, поддерживаемых этим классом
Mixin: \Cake\Datasource\QueryTrait
Расположение: ORM/Query.php
Краткое описание констант
-
integerAPPEND0 -
booleanOVERWRITEtrue -
integerPREPEND1
Унаследованные константы
Краткое описание свойств
-
$_autoFieldsprotectedbooleanОтслеживает, следует ли исходному запросу включать поля из таблицы верхнего уровня.
-
$_beforeFindFiredprotectedИстина, если событие beforeFind уже было вызвано для этого запросаboolean -
$_counterprotectedcallableФункция обратного вызова, которая может использоваться для вычисления общего количества записей, которые будут соответствовать этому запросу, когда не используется
limit -
$_eagerLoaderprotectedЭкземпляр класса, отвечающего за хранение содержаний ассоциации и за их жадное загрузку при выполнении этого запроса
-
$_hasFieldsprotectedbooleanВыбрали ли пользователи какие-либо поля до выполнения, это используется для определения, должны ли быть выбраны какие-либо поля автоматически.
-
$_hydrateprotectedНеобходимо ли гидратировать результаты в объекты сущностейboolean -
$_resultsCountprotectedЗначение COUNT(*) для запроса.integer|null
Унаследованные свойства
-
_connection,_dirty,_functionsBuilder,_iterator,_parts,_resultDecorators,_selectTypeMap,_type,_useBufferedResults,_valueBinder,typeCastEnabled_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
Заполняет или добавляет части текущих положений запроса с использованием массива. Это удобно для передачи всех положений запроса сразу. Массив options принимает:
- Получить/установить, следует ли ORM автоматически добавлять поля.
- cache() public
- cleanCopy() publicСоздаёт копию текущего запроса, вызывает событие beforeFind и сбрасывает некоторые состояния.
- clearContain() publicОчищает содержащие ассоциации из текущего запроса.
- contain() public
Устанавливает список ассоциаций, которые должны быть загружены вместе с этим запросом. Список связанных таблиц должен быть предварительно настроен как ассоциации с помощью API таблицы.
- count() publicВозвращает общее количество результатов для запроса.
- counter() public
Регистрирует вызываемую функцию, которая будет выполняться при вызове метода
countв этом запросе. Возвращаемое значение для функции будет установлено как возвращаемое значение методаcount. - delete() publicСоздаёт запрос на удаление.
-
Устанавливает экземпляр класса загрузчика ленивых загрузок для загрузки ассоциаций и хранения содержаний. Если вызвано без аргументов, то вернёт текущий настроенный экземпляр.
- enableAutoFields() publicУстанавливает, следует ли ORM автоматически добавлять поля.
- enableHydration() publicВключить/выключить гидратацию сущностей.
- find() publicПрименить пользовательские способы поиска к существующему объекту запроса.
- getContain() public
- getEagerLoader() publicВозвращает текущий настроенный экземпляр.
- Включить/выключить гидратацию сущностей.
- innerJoinWith() public
Создаёт INNER JOIN с переданной связанной таблицей, сохраняя соответствие внешнего ключа и пользовательские условия, которые были первоначально заданы для него.
- insert() publicСоздаёт запрос на вставку.
- isAutoFieldsEnabled() publicПолучает, следует ли ORM автоматически добавлять поля.
- isHydrationEnabled() publicВозвращает текущий режим гидратации.
- jsonSerialize() publicВыполняет запрос и преобразует результат в JSON.
- leftJoinWith() public
Создаёт LEFT JOIN с переданной связанной таблицей, сохраняя соответствие внешнего ключа и пользовательские условия, которые были первоначально заданы для него.
- matching() public
Добавляет условия фильтрации в этот запрос для получения только строк, имеющих отношение к другой из связанной таблицы на основе условий в связанной таблице.
- notMatching() public
Добавляет условия фильтрации в этот запрос для получения только строк, не имеющих соответствия другой из связанной таблицы на основе условий в связанной таблице.
- select() public
Добавляет новые поля, которые должны возвращаться оператором
SELECTпри выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки. - selectAllExcept() public
Все поля, связанные с переданной таблицей, за исключением исключённых полей, будут добавлены в предложение SELECT запроса. Переданные исключенные поля не должны быть алиасами. После первого вызова этого метода второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте логическое значение overwrite со значением true, которое сбросит предложение SELECT, удалив все предыдущие добавления.
- setEagerLoader() public
Устанавливает экземпляр класса загрузчика ленивых загрузок для загрузки ассоциаций и хранения содержаний.
- sql() publicВозвращает SQL представление этого объекта.
- triggerBeforeFind() publicВызывает событие beforeFind для объекта репозитория запроса.
- update() publicСоздаёт запрос на обновление.
Подробное описание метода
__call()source public
__call( $method , $arguments )
Исключения
BadMethodCallExceptionесли метод вызывается для запроса, не являющегося запросом на выборку
__clone()source public
__clone( )
Метод клонирования объекта.
Удаляет внутренний итератор клонов, и клонирует экземпляры связывателя значений и eagerloader.
Переопределяет
Cake\Database\Query::__clone() __construct()source public
__construct( Cake\Database\Connection $connection , Cake\ORM\Table $table )
Конструктор
Параметры
-
Cake\Database\Connection$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 Карта типов для проверки столбцов. Эта карта типов косвенно изменяется через Cake\ORM\Query::addDefaultTypes()
- array
$associations - Вложенное дерево ассоциаций для обхода.
_addDefaultFields()source protected
_addDefaultFields( )
Проверяет, есть ли какие-либо заданные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
_addDefaultSelectTypes()source protected
_addDefaultSelectTypes( )
Устанавливает типы по умолчанию для преобразования полей в предложении SELECT
_decorateResults()source protected
_decorateResults( Traversable $result )
Декорирует итератор результатов с помощью процедур MapReduce и форматировщиков.
Параметры
- Traversable
$result - Исходные результаты
Возвращает
Cake\Datasource\ResultSetInterface_dirty()source protected
_dirty( )
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэширования в памяти, например, предыдущие результаты
Переопределяет
Cake\Database\Query::_dirty() _execute()source protected
_execute( )
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для ленивой загрузки глубоких ассоциаций.
Возвращает
Cake\ORM\ResultSet_performCount()source protected
_performCount( )
Выполняет и возвращает COUNT(*) для запроса.
Возвращает
integer_transformQuery()source protected
_transformQuery( )
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет соединения, необходимые для ленивой загрузки ассоциаций, определенных с помощью contain
Также устанавливает типы по умолчанию для столбцов в предложении SELECT
См. также
\Cake\Database\Query::execute()addDefaultTypes()source public
addDefaultTypes( Cake\ORM\Table $table )
Подсказывает этому объекту связать правильные типы при преобразовании условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователя при указании условий.
Этот метод возвращает тот же объект запроса для цепочки вызовов.
Параметры
-
Cake\ORM\Table$table - Таблица для извлечения типов
Возвращает
$this
all()source public
all( )
Получить результаты для этого запроса.
Возвращает
Cake\Datasource\ResultSetInterfaceИсключения
RuntimeExceptionесли этот метод вызван для запроса, не являющегося запросом на выборку.
Реализация
Cake\Datasource\QueryInterface::all() applyOptions()source public
applyOptions( array $options )
Заполняет или добавляет части текущих условий запроса с помощью массива. Это удобно для передачи всех условий запроса сразу. Массив опций принимает:
Заполняет или добавляет части текущих условий запроса с помощью массива. Это удобно для передачи всех условий запроса сразу. Массив опций принимает:
- fields: Соответствует методу select
- conditions: Соответствует методу where
- limit: Соответствует методу limit
- order: Соответствует методу order
- offset: Соответствует методу offset
- group: Соответствует методу group
- having: Соответствует методу having
- contain: Соответствует опциям contain для ленивой загрузки
- 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)
Параметры
- array
$options - список условий запроса для применения новых частей.
Возвращает
$this
Реализация
Cake\Datasource\QueryInterface::applyOptions() autoFields()source public deprecated
autoFields( boolean|null $value = null )
Получить/установить, следует ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключит авто-поля. Вы можете снова включить авто-поля с помощью этого метода.
Устарело
3.4.0 Используйте enableAutoFields()/isAutoFieldsEnabled() вместо этого.Параметры
- boolean|null
$valueoptional null - Значение для установки или null для чтения текущего значения.
Возвращает
boolean|Cake\ORM\Query$this Либо текущее значение, либо объект запроса.
cache()source public
cache( $key , $config = 'default' )
Возвращает
$this
Исключения
RuntimeExceptionКогда вы пытаетесь кэшировать запрос, не являющийся запросом на выборку.
cleanCopy()source public
cleanCopy( )
Создает копию текущего запроса, запускает beforeFind и сбрасывает некоторые состояния.
Следующее состояние будет очищено:
- autoFields
- limit
- offset
- функции map/reduce
- форматеры результатов
- order
- включения
Этот метод создает клон запросов, которые полезны при работе с подзапросами.
Возвращает
Cake\ORM\QueryclearContain()source public
clearContain( )
Очищает содержащие ассоциации из текущего запроса.
Возвращает
$this
contain()source public
contain( array|string|null $associations = null , callable|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: Массив с полями, которые должны быть извлечены из ассоциации. -
finder: Искатель, используемый при загрузке связанных записей. Либо имя искателя как строка, либо массив для определения параметров, передаваемых искателю. -
queryBuilder: Эквивалентно передаче вызываемого объекта вместо массива опций.
Пример:
// Set options for the hasMany articles that will be eagerly loaded for an author
$query->contain([
'Articles' => [
'fields' => ['title', 'author_id']
]
]); Искатели могут быть настроены для использования опций.
// Retrieve translations for the articles, but only those for the `en` and `es` locales
$query->contain([
'Articles' => [
'finder' => [
'translations' => [
'locales' => ['en', 'es']
]
]
]
]); При содержании ассоциаций важно включить столбцы внешних ключей. Пропуск этого приведет к исключениям.
// Use a query builder to add conditions to the containment
$query->contain('Authors', function ($q) {
return $q->where(...); // add conditions
});
// Use special join conditions for multiple containments in the same method call
$query->contain([
'Authors' => [
'foreignKey' => false,
'queryBuilder' => function ($q) {
return $q->where(...); // Add full filtering conditions
}
],
'Tags' => function ($q) {
return $q->where(...); // add conditions
}
]); Если функция вызывается без аргументов, она вернет массив со списком ранее настроенных ассоциаций, которые должны быть включены в результат. Эта часть получения устарела с версии 3.6.0. Используйте getContain() вместо нее.
Если функция вызвана с пустым первым аргументом и $override установлено в true, предыдущий список будет очищен.
Параметры
- array|string|null
$associationsнеобязательно null - Список псевдонимов таблиц, которые должны быть запрошены.
- callable|boolean
$overrideнеобязательно false Построитель запросов для ассоциации или, если associations является массивом, boolean, указывающий, следует ли переопределять предыдущий список переданным списком. По умолчанию предыдущий список объединяется с новым.
Возвращаемое значение
array|Cake\ORM\Query$this
count()source public
count( )
Возвращает общее количество результатов для запроса.
Возвращает COUNT(*) для запроса. Если запрос не был изменен и подсчет уже выполнен, возвращается кэшированное значение.
Возвращаемое значение
integerРеализация
Cake\Datasource\QueryInterface::count() counter()source public
counter( callable|null $counter )
Регистрирует вызываемую функцию, которая будет выполнена, когда будет вызван метод count в этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение метода count.
Это особенно полезно, когда необходимо оптимизировать запрос для возвращения количества, например, удаляя ненужные соединения, удаляя группировку или просто возвращая приблизительное количество строк.
Обратный вызов получит в качестве первого аргумента клон этого запроса, а не сам запрос.
Если первый параметр имеет значение null, вызывается встроенная функция счётчика.
Параметры
- callable|null
$counter - Значение счётчика.
Возвращаемое значение
$this
delete()source public
delete( string|null $table = null )
Создаёт запрос на удаление.
Изменяет тип запроса на 'delete'. Может быть объединён с методом where() для создания запросов на удаление.
Параметры
- string|null
$tableнеобязательно null - Неиспользуемый параметр.
Возвращаемое значение
$this
Переопределяет
Cake\Database\Query::delete() eagerLoader()source public deprecated
eagerLoader( Cake\ORM\EagerLoader $instance = null )
Устанавливает экземпляр класса ленивого загрузчика для использования при загрузке ассоциаций и хранении содержаний. Если вызывается без аргументов, возвращает текущий настроенный экземпляр.
Устарело
3.4.0 Используйте setEagerLoader()/getEagerLoader() вместо этого.Параметры
-
Cake\ORM\EagerLoader$instanceнеобязательно null Ленивый загрузчик для использования. Передайте null, чтобы получить текущий eagerloader.
Возвращаемое значение
Cake\ORM\EagerLoader|Cake\ORM\Query$this
enableAutoFields()source public
enableAutoFields( boolean $value = true )
Устанавливает, следует ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключит автоматические поля. Можно включить автоматические поля с помощью этого метода.
Параметры
- boolean
$valueнеобязательно true - Установите true для включения, false для отключения.
Возвращаемое значение
$this
enableHydration()source public
enableHydration( boolean $enable = true )
Включить/выключить гидратацию сущностей.
Если установлено в false, для запроса будут возвращены результаты в виде массива.
Параметры
- boolean
$enableнеобязательно true - Используйте boolean для установки режима гидратации.
Возвращаемое значение
$this
find()source public
find( string $finder , array $options = [] )
Применение пользовательских методов поиска к существующему объекту запроса.
Параметры
- string
$finder - Метод поиска, который нужно использовать.
- array
$optionsнеобязательно [] - Опции для метода поиска.
Возвращаемое значение
$this Возвращает изменённый запрос.
См. также
\Cake\ORM\Table::find()Реализация
Cake\Datasource\QueryInterface::find() getEagerLoader()source public
getEagerLoader( )
Возвращает текущий настроенный экземпляр.
Возвращаемое значение
Cake\ORM\EagerLoaderhydrate()source public deprecated
hydrate( boolean|null $enable = null )
Включить/выключить гидратацию сущностей.
Если установлено в false, будут возвращены результаты в виде массива.
Устарело
3.4.0 Используйте enableHydration()/isHydrationEnabled() вместо этого.Параметры
- boolean|null
$enableнеобязательно null Используйте boolean для установки режима гидратации. 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
$builderнеобязательно null функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей.
Возвращаемое значение
$this
См. также
\Cake\ORM\Query::matching()insert()source public
insert( array $columns , array $types = [] )
Создать запрос на вставку.
Это изменяет тип запроса на 'insert'. Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values()
Можно комбинировать с методом where() для создания запросов на удаление.
Параметры
- массив
$columns - Столбцы для вставки.
- массив
$typesнеобязательно [] - Сопоставление между столбцами и их типами данных.
Возвращает
$this
Выбрасывает
RuntimeExceptionПри отсутствии столбцов.
Переопределяет
Cake\Database\Query::insert() isAutoFieldsEnabled()source public
isAutoFieldsEnabled( )
Получить, включены ли автоматическое добавление полей в ORM.
По умолчанию вызов select() отключит автоматическое добавление полей. Можно включить его повторно с помощью enableAutoFields().
Возвращает
booleanТекущее значение.
isHydrationEnabled()source public
isHydrationEnabled( )
Возвращает текущий режим гидратации.
Возвращает
booleanjsonSerialize()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'])
->enableAutoFields(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'])
->enableAutoFields(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. Если вам нужно добавить более сложные клаузы, вы можете сделать это непосредственно в основном запросе.
Параметры
- строка
$assoc - Ассоциация для объединения
- функция
$builderнеобязательно 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. Если вам нужно добавить более сложные клаузы, вы можете сделать это непосредственно в основном запросе.
Параметры
- строка
$assoc - Ассоциация для фильтрации
- функция
$builderнеобязательно 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. Если вам нужно добавить более сложные клаузы, вы можете сделать это непосредственно в основном запросе.
Параметры
- строка
$assoc - Ассоциация для фильтрации
- функция
$builderнеобязательно null Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$this
select()source public
select( array|Cake\Database\ExpressionInterface|callable|string|Cake\ORM\Table|Cake\ORM\Association $fields = [] , boolean $overwrite = false )
Добавляет новые поля, которые должны быть возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы как массив строк, массив объектов выражения, одиночное выражение или одиночная строка.
Если передаётся массив, ключи будут использоваться для алиасирования полей, используя значение в качестве реального поля для алиасирования. Можно алиасить строки, объекты Expression или даже другие объекты Query.
Если передаётся вызываемая функция, возвращаемый массив функции будет использоваться как список полей.
По умолчанию эта функция будет добавлять любые переданные аргументы в список полей для выбора, если второй аргумент не установлен в true.
Примеры:
$query->select(['id', 'title']); // Produces SELECT id, title
$query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
$query->select('id', true); // Resets the list: SELECT id
$query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
$query->select(function ($query) {
return ['article_id', 'total' => $query->count('*')];
}) По умолчанию поля не выбираются, если у вас есть экземпляр Cake\ORM\Query и вы пытаетесь добавить поля, вы также должны вызвать Cake\ORM\Query::enableAutoFields() для выбора стандартных полей из таблицы.
Если вы передаёте экземпляр класса Cake\ORM\Table или Cake\ORM\Association, все поля в схеме таблицы или ассоциации будут добавлены в предложение select.
Параметры
- массив|
Cake\Database\ExpressionInterface|вызываемая функция|строка|Cake\ORM\Table|Cake\ORM\Association$fieldsнеобязательно [] Поля, которые нужно добавить в список.
- boolean
$overwriteнеобязательно false - сбросить ли поля с переданным списком или нет
Возвращает
$this
Переопределяет
Cake\Database\Query::select() selectAllExcept()source public
selectAllExcept( Cake\ORM\Table|Cake\ORM\Association $table , array $excludedFields , boolean $overwrite = false )
Все поля, связанные с переданной таблицей, за исключением исключённых, будут добавлены в предложение select запроса. Переданные исключённые поля не должны быть алиасами. После первого вызова этого метода второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос в первый раз. Если вам нужно изменить список после первого вызова, передайте значение true для параметра overwrite, которое сбросит предложение select, удалив все предыдущие добавления.
Параметры
-
Cake\ORM\Table|Cake\ORM\Association$table - Таблица для получения массива столбцов
- массив
$excludedFields - Имена столбцов без алиасов, которые вы не хотите выбирать из $table
- boolean
$overwriteнеобязательно false - Нужно ли сбрасывать/удалять ранее выбранные поля
Возвращает
Cake\ORM\QueryВыбрасывает
InvalidArgumentExceptionЕсли Association|Table не передана в первом аргументе
setEagerLoader()source public
setEagerLoader( Cake\ORM\EagerLoader $instance )
Устанавливает экземпляр класса загрузчика с предварительной загрузкой для использования при загрузке ассоциаций и сохранении содержаний.
Параметры
-
Cake\ORM\EagerLoader$instance - Загрузчик с предварительной загрузкой для использования.
Возвращает
$this
sql()source public
sql( Cake\Database\ValueBinder $binder = null )
Возвращает SQL-представление этого объекта.
Параметры
- Cake\Database\ValueBinder
$binderнеобязательно null $generator — плейсхолдер-объект, который будет содержать связанные значения для выражений
Возвращает
строкаПереопределяет
Cake\Database\Query::sql() triggerBeforeFind()source public
triggerBeforeFind( )
Вызывает событие beforeFind для объекта хранилища запроса.
Будет вызван не более одного раза и только для запросов выбора.
update()source public
update( string|null $table = null )
Создает запрос обновления.
Изменяет тип запроса на 'update'. Может быть объединен с методами set() и where() для создания запросов обновления.
Параметры
- строка|null
$tableнеобязательно null - Неиспользуемый параметр.
Возвращает
$this
Переопределяет
Cake\Database\Query::update() Методы, унаследованные от Cake\Database\Query
__toString()source public
__toString( )
Возвращает строковое представление этого запроса (полное SQL-выражение).
Возвращает
строка_conjugate()source protected
_conjugate( string $part , string|null|array|Cake\Database\ExpressionInterface|callable $append , string $conjunction , array $types )
Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.
Параметры
- строка
$part - Имя части запроса, к которой нужно добавить новую часть
- строка|null|массив|
Cake\Database\ExpressionInterface|замыкание$append - Выражение или функция-строитель, которую нужно добавить.
- строка
$conjunction - Тип союза, который нужно использовать для обработки части
- массив
$types - Ассоциативный массив имен типов, используемых для привязки значений к запросу
_decorateStatement()source protected
_decorateStatement( Cake\Database\StatementInterface $statement )
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.
Параметры
-
Cake\Database\StatementInterface$statement - объект для обработки
Возвращает
Cake\Database\Statement\CallbackStatement_makeJoin()source protected
_makeJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions , string $type )
Возвращает массив, который можно передать методу join, описывающему один оператор соединения.
Параметры
- строка|массив
$table - Таблица для соединения
- строка|массив|
Cake\Database\ExpressionInterface$conditions Условия для использования при соединении.
- строка
$type - тип соединения
Возвращает
массивandHaving()source public
andHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в предложении HAVING. Этот метод работает точно так же, как и метод andWhere(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не очищаются строителем запросов.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|замыкание$conditions - Условия AND для HAVING.
- массив
$typesнеобязательно [] - Ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::andWhere()andWhere()source public
andWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно отметить, что при вызове этой функции любой ранее определенный набор условий для этого запроса будет обрабатываться как один аргумент для оператора AND. Эта функция будет работать не только с последним определенным условием, но и со всеми условиями в целом.
При использовании массива для определения условий создание ограничений из каждого элемента массива будет использовать ту же логику, что и функция where(). Это означает, что каждый элемент массива будет соединен с другим с помощью оператора AND, если вы не вложенные условия в массиве с использованием другого оператора.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Произведёт:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Производит:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->or_(['author_id' => 1])
->add(['author_id' => 2]);
}); Генерирует следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|замыкание$conditions - Условия, которые нужно добавить с помощью AND.
- массив
$typesнеобязательно [] - Ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\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 целочисленных заполнителя. При использовании именованных заполнителей этот метод требует, чтобы заполнители включали :, например :value.
Параметры
- строка|целое число
$param заполнитель, который должен быть заменен на цитированную версию $value
- смешанное
$value - Связываемое значение
- строка|целое число
$typeнеобязательно 'строка' отображаемое имя типа, используемое для преобразования при отправке в базу данных
Возвращает
$this
bufferResults()source public deprecated
bufferResults( boolean|null $enable = null )
Включить/отключить буферизацию результатов.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать набор результатов или кэшировать и итерировать его.
При отключении это потребует меньше памяти, поскольку полученные результаты не будут запоминаться для будущих итераций.
Если вызвано без аргументов, оно вернет, включена ли буферизация.
Устарело
3.4.0 Используйте enableBufferedResults()/isBufferedResultsEnabled() вместо этого.Параметры
- булево|null
$enableнеобязательно null - Включить или отключить буферизацию
Возвращает
булево|Cake\Database\Query$this
clause()source public
clause( string $name )
Возвращает данные, хранящиеся в указанном фрагменте запроса. Это полезно для изменения внутренних частей запроса, и диалекты SQL используют его для соответствующей трансформации запроса перед выполнением. Допустимые фрагменты, которые можно получить: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
Значение возвращаемого результата для каждого фрагмента может отличаться. Некоторые фрагменты используют QueryExpression для внутреннего хранения состояния, некоторые — массивы, а другие — булевы значения или целые числа. Вот краткий обзор типов возвращаемых значений для каждого фрагмента.
- update: строка Имя таблицы для обновления
- set: QueryExpression
- insert: массив, вернёт массив, содержащий таблицу + столбцы.
- values: ValuesExpression
- select: массив, вернёт пустой массив, если нет установленных полей
- distinct: boolean
- from: массив таблиц
- join: массив
- set: массив
- where: QueryExpression, возвращает null, если не задано
- group: массив
- having: QueryExpression, возвращает null, если не задано
- order: OrderByExpression, возвращает null, если не задано
- limit: целое число или QueryExpression, null, если не задано
- offset: целое число или QueryExpression, null, если не задано
- union: массив
Параметры
- строка
$name - Имя фрагмента, который нужно вернуть
Возвращает
mixedИсключение
InvalidArgumentExceptionПри отсутствии указанного фрагмента.
connection()source public deprecated
connection( Cake\Database\Connection|null $connection = null )
Устанавливает экземпляр соединения, используемый для выполнения и преобразования этого запроса. При вызове с нулевым аргументом возвращает текущий экземпляр соединения.
Deprecated
3.4.0 Используйте setConnection()/getConnection() вместо этого.Параметры
-
Cake\Database\Connection|null$connectionoptional null - Экземпляр соединения
Возвращает
$this|\Cake\Database\Connection
decorateResults()source public
decorateResults( callable|null $callback , boolean $overwrite = false )
Регистрирует обратный вызов, который будет выполняться для каждого результата, извлекаемого из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с необработанными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с любыми возможными изменениями.
Обратные вызовы будут выполняться лениво, если для базы данных извлечены только 3 строки, они будут вызваны 3 раза, даже если в курсоре могут быть другие строки для извлечения.
Обратные вызовы складываются в том порядке, в котором они регистрируются. Если вы хотите сбросить стек, вызовите эту функцию со вторым параметром, установленным в true.
Если вы хотите удалить все декораторы из стека, установите первый параметр в null, а второй — в true.
Пример
$query->decorateResults(function ($row) {
$row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
return $row;
}); Параметры
- callable|null
$callback - Обратный вызов, который нужно вызвать при получении результатов.
- boolean
$overwriteoptional false - Включает ли это добавление или замену всех существующих декораторов.
Возвращает
$this
disableResultsCasting()source public
disableResultsCasting( )
Отключает автоматическое приведение типов полей к соответствующему типу данных PHP
Возвращает
$this
distinct()source public
distinct( array|Cake\Database\ExpressionInterface|string|boolean $on = [] , boolean $overwrite = false )
Добавляет фрагмент DISTINCT в запрос для удаления дубликатов из набора результатов. Этот фрагмент можно использовать только для операторов select.
Если вы хотите отфильтровать дубликаты, основанные на строках, которые разделяют конкретное поле или набор полей, вы можете передать массив полей для фильтрации. Обратите внимание, что этот параметр может не полностью поддерживаться во всех системах баз данных.
Примеры:
// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();
// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');
// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true); Параметры
- массив|
Cake\Database\ExpressionInterface|строка|boolean$onoptional [] Включить/выключить фрагмент distinct или список полей для фильтрации
- boolean
$overwriteoptional false - нужно ли сбрасывать поля с переданным списком или нет
Возвращает
$this
enableBufferedResults()source public
enableBufferedResults( boolean $enable = true )
Включает/Отключает буферизацию результатов.
При включении результаты, возвращаемые этим запросом, будут буферизированы. Это позволяет вам итерировать набор результатов несколько раз или и кешировать, и итерировать его.
При отключении это позволит сэкономить память, так как полученные результаты не будут запоминаться для будущих итераций.
Параметры
- boolean
$enableoptional true - Включить или выключить буферизацию
Возвращает
$this
enableResultsCasting()source public
enableResultsCasting( )
Включает автоматическое приведение типов полей к соответствующему типу
Возвращает
$this
epilog()source public
epilog( string|Cake\Database\Expression\QueryExpression|null $expression = null )
Строка или выражение, которое будет добавлено к сгенерированному запросу
Примеры:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Содержимое эпилога — это необработанный SQL-код и не подходит для использования с данными, предоставленными пользователем.
Параметры
- строка|
Cake\Database\Expression\QueryExpression|null$expressionoptional null - Выражение, которое нужно добавить
Возвращает
$this
execute()source public
execute( )
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключения, настроенного в программе. Возвращает полученный объект оператора.
При выполнении запроса внутренне выполняется несколько шагов. Сначала подключение преобразует этот объект в соответствии со своим конкретным диалектом, что может привести к созданию другого объекта Query, который фактически будет выполнен. Сразу после этого литеральные значения передаются подключению, чтобы они были связаны с запросом безопасным способом. Наконец, полученный оператор украшается пользовательскими объектами для выполнения обратных вызовов для каждой полученной строки, если это необходимо.
Результат оператора можно перебирать, поэтому его можно использовать в любом цикле, как и массив.
Этот метод можно переопределить в подклассах запроса, чтобы украсить поведение при выполнении запроса.
Возвращает
Cake\Database\StatementInterfacefrom()source public
from( array|string $tables = [] , boolean $overwrite = false )
Добавляет одну или несколько таблиц, которые будут использоваться в операторе FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражения, одно выражение или одна строка.
Если передаётся массив, ключи будут использоваться для алиасирования таблиц с использованием значения в качестве фактического поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты Query.
По умолчанию эта функция добавляет любой переданный аргумент в список таблиц для выбора, если только второй аргумент не установлен в true.
Этот метод можно использовать для операторов select, update и delete.
Примеры:
$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub Параметры
- массив|строка
$tablesoptional [] Таблицы для добавления в список. Этот аргумент может быть передан как массив строк, массив объектов выражения или одна строка. См. примеры выше для допустимых типов вызовов.
- boolean
$overwriteoptional false - Сбрасывать ли таблицы с переданным списком или нет
Возвращает
$this|массив
func()source public
func( )
Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных SQL-функций.
Пример:
$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02']) Возвращает
Cake\Database\FunctionsBuildergetConnection()source public
getConnection( )
Получает экземпляр соединения, используемого для выполнения и преобразования этого запроса.
Возвращает
Cake\Database\ConnectiongetIterator()source public
getIterator( )
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости вызова execute() вручную, делая его похожим на набор результатов, а не на сам запрос.
Возвращает
Cake\Database\StatementInterface|nullРеализация
IteratorAggregate::getIterator() getSelectTypeMap()source public
getSelectTypeMap( )
Возвращает класс TypeMap, в котором хранятся типы для каждого поля в предложении SELECT.
Возвращает
Cake\Database\TypeMapgetValueBinder()source public
getValueBinder( )
Возвращает текущий используемый экземпляр ValueBinder.
ValueBinder отвечает за генерацию заполнительных значений запроса и временное связывание значений с этими заполнительными значениями, чтобы они могли быть правильно переданы объекту оператора.
Возвращает
Cake\Database\ValueBindergroup()source public
group( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite = false )
Добавляет одно или несколько полей, которые будут использоваться в предложении GROUP BY для данного запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
По умолчанию эта функция будет добавлять все переданные аргументы к списку группируемых полей, если второй аргумент не установлен в true.
Примеры:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Поля группировки не подходят для использования с данными, предоставленными пользователем, так как они не проверяются на безопасность в создателе запросов.
Параметры
- массив|
Cake\Database\ExpressionInterface|строка$fields - поля, которые нужно добавить в список
- булево
$overwriteнеобязательный false - нужно ли сбросить поля со списком, переданным в параметре
Возвращает
$this
having()source public
having( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )
Добавляет условие или набор условий, которые будут использоваться в предложении HAVING для данного запроса. Этот метод работает точно так же, как и метод where(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не проверяются на безопасность в создателе запросов.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|обратный вызов|null$conditionsнеобязательный null - условия HAVING.
- массив
$typesнеобязательный [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- булево
$overwriteнеобязательный false - нужно ли сбросить условия со списком, переданным в параметре
Возвращает
$this
См. также
\Cake\Database\Query::where()identifier()source public
identifier( string $identifier )
Создает выражение, которое ссылается на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
Значение используется как есть, и вам может потребоваться использовать псевдонимы или включить ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.
Пример
$query->newExp()->lte('count', $query->identifier('total')); Параметры
- строка
$identifier - идентификатор для выражения
Возвращает
Cake\Database\ExpressionInterfaceinnerJoin()source public
innerJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )
Добавляет одну INNER JOIN строку в запрос.
Это метод сокращенной записи для построения соединений через join().
Аргументы этого метода идентичны сокращенному методу leftJoin(), обратитесь к описанию этого метода для получения дополнительных подробностей.
Параметры
- строка|массив
$table - Таблица для соединения
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательный [] Условие для соединения.
- массив
$typesнеобязательный [] Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
into()source public
into( string $table )
Устанавливает имя таблицы для запросов вставки.
Параметры
- строка
$table - Имя таблицы, в которую нужно вставить данные.
Возвращает
$this
isBufferedResultsEnabled()source public
isBufferedResultsEnabled( )
Возвращает, включена ли/выключена ли буферизация результатов.
При включенной буферизации результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам итерировать набор результатов несколько раз или кэшировать и итерировать его.
При отключении буферизации потребляется меньше памяти, так как полученные результаты не запоминаются для последующих итераций.
Возвращает
booleanjoin()source public
join( array|string|null $tables = null , array $types = [] , boolean $overwrite = false )
Добавляет одну или несколько таблиц, которые будут использоваться в качестве условий JOIN для этого запроса. Таблицы могут быть переданы как массив строк, массив, описывающий части соединения, массив с несколькими описаниями соединений или одна строка.
По умолчанию эта функция будет добавлять все переданные аргументы в список таблиц для соединения, если третий аргумент не установлен в true.
Если тип соединения не указан, по умолчанию используется INNER JOIN: $query->join(['authors']) даст INNER JOIN authors ON 1 = 1
Также можно использовать псевдонимы соединений, используя ключ массива: $query->join(['a' => 'authors']) даст INNER JOIN authors a ON 1 = 1
Соединение можно полностью описать и использовать псевдоним с помощью нотации массивов:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id Вы даже можете указать несколько соединений в массиве, включая полное описание:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
],
'p' => [
'table' => 'publishers',
'type' => 'INNER',
'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation" Использование условий и типов
Условия могут быть выражены, как показано в примерах выше, с помощью строки для сравнения столбцов или строки с уже приведенными в кавычки литерными значениями. Кроме того, возможно использовать условия, выраженные в массивах или объектах выражений.
При использовании массивов для выражения условий часто желательно преобразовать литерные значения в правильное представление базы данных. Это достигается с помощью второго параметра этой функции.
$query->join(['a' => [
'table' => 'articles',
'conditions' => [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean']) Замена соединений
При создании псевдонимов соединений с использованием нотации массивов вы можете переопределять предыдущие определения соединений, используя тот же псевдоним в последующих вызовах этой функции, или вы можете заменить все ранее определенные соединения другим списком, если третий параметр этой функции установлен в true.
$query->join(['alias' => 'table']); // joins table with as alias $query->join(['alias' => 'another_table']); // joins another_table with as alias $query->join(['something' => 'different_table'], [], true); // resets joins list
Параметры
- массив|строка|null
$tablesнеобязательный null - Список таблиц для соединения в запросе
- массив
$typesнеобязательный [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- булево
$overwriteнеобязательный false - нужно ли сбросить соединения со списком, переданным в параметре
Возвращает
$this|массив
См. также
Cake\Database\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() для получения дополнительных подробностей о параметрах и типах.
Параметры
- строка|массив
$table - Таблица для соединения
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательный [] Условие для соединения.
- массив
$typesнеобязательный [] Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
limit()source public
limit( integer|Cake\Database\ExpressionInterface $num )
Устанавливает количество записей, которые должны быть получены из базы данных, принимает целое число или объект выражения, результатом вычисления которого является целое число. В некоторых базах данных эта операция может быть не поддерживается или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
- целое число|
Cake\Database\ExpressionInterface$num - количество записей, которые должны быть возвращены
Возвращает
$this
modifier()source public
modifier( array|Cake\Database\ExpressionInterface|string $modifiers , boolean $overwrite = false )
Добавляет один или несколько SELECT модификаторов, которые должны использоваться в SELECT.
По умолчанию эта функция будет добавлять любой переданный аргумент в список модификаторов, которые будут применяться, если второй аргумент не установлен в значение true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
- массив|
Cake\Database\ExpressionInterface|строка$modifiers - модификаторы, которые должны быть применены к запросу
- булево
$overwriteнеобязательно false - следует ли сбросить порядок с помощью списка полей или нет
Возвращает
$this
newExpr()source public
newExpr( mixed $rawExpression = null )
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования более специализированного класса QueryExpression, если это необходимо.
Вы можете необязательно передать одну строку с сырым SQL-кодом или массив выражений в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
- смешанное
$rawExpressionнеобязательно null - Строка, массив или что угодно, что нужно обернуть в объект выражения
Возвращает
Cake\Database\Expression\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)
Параметры
- целое число|
Cake\Database\ExpressionInterface$num - количество записей, которые должны быть пропущены
Возвращает
$this
orHaving()source public устаревший
orHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора OR в предложении HAVING. Этот метод работает точно так же, как метод orWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, введенными пользователем, так как они не очищаются с помощью генератора запросов.
Устаревший
3.5.0 Этот метод создает трудно предсказуемый SQL на основе текущего состояния запроса. Используйте Query::having() вместо него, так как у него более предсказуемое и понятное поведение.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|вызываемый объект$conditions - Условия OR для HAVING.
- массив
$typesнеобязательно [] - ассоциативный массив имен типов, используемых для привязки значений к запросу.
Возвращает
$this
См. также
\Cake\Database\Query::orWhere()orWhere()source public устаревший
orWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку с использованием оператора OR. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно заметить, что при вызове этой функции любой ранее заданный набор условий для этого запроса будет обработан как один аргумент для оператора OR. Эта функция будет работать не только с последним определенным условием, но и со всеми условиями в целом.
При использовании массива для определения условий, создание ограничений из каждого элемента массива будет использовать ту же логику, что и функция where(). Это означает, что каждый элемент массива будет связан с другим с использованием оператора OR, если вы не вложите условия в массив с использованием других операторов.
Примеры:
$query->where(['title' => 'Hello World')->orWhere(['title' => 'Foo']);
Произведёт:
WHERE title = 'Hello World' OR title = 'Foo'
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->orWhere(['author_id' => 1, 'comments_count >' => 10])
Произведёт:
WHERE (published = 0 OR published IS NULL) OR (author_id = 1 AND comments_count > 10)
$query
->where(['title' => 'Foo'])
->orWhere(function ($exp, $query) {
return $exp
->or_(['author_id' => 1])
->add(['author_id' => 2]);
}); Сгенерирует следующие условия:
WHERE (title = 'Foo') OR (author_id = 1 OR author_id = 2)
Устаревший
3.5.0 Этот метод создаёт трудно предсказуемый SQL на основе текущего состояния запроса. Используйте Query::where() вместо него, так как он имеет более предсказуемое и понятное поведение.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|вызываемый объект$conditions - Условия для добавления с помощью OR.
- массив
$typesнеобязательно [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::where()Cake\Database\Typeorder()source public
order( array|Cake\Database\ExpressionInterface|callable|string $fields , boolean $overwrite = false )
Добавляет одно или несколько полей, которые должны использоваться в предложении ORDER для этого запроса. Поля могут передаваться как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передаётся массив, ключи будут использоваться как сами поля, а значения будут представлять порядок, в котором эти поля должны быть упорядочены. При вызове несколько раз с одними и теми же полями в качестве ключей, последнее определение порядка будет преобладать над другими.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей, которые должны быть выбраны, если второй аргумент не установлен в значение true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Произведёт:
ORDER BY title DESC, author_id ASC
$query->order(['title' => 'DESC NULLS FIRST'])->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
и
$query->order(function ($exp, $query) {
return [$exp->add(['id % 2 = 0']), 'title' => 'ASC'];
}); Оба станут:
ORDER BY (id %2 = 0), title ASC
Поля/направления сортировки не очищаются с помощью генератора запросов. Вы должны использовать белый список полей/направлений при передаче данных, введенных пользователем, в order().
Если вам нужно задавать сложные выражения как условия сортировки, вы должны использовать orderAsc() или orderDesc().
Параметры
- массив|
Cake\Database\ExpressionInterface|вызываемый объект|строка$fields - поля, которые должны быть добавлены в список
- булево
$overwriteнеобязательно false - следует ли сбросить порядок с помощью списка полей или нет
Возвращает
$this
orderAsc()source public
orderAsc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )
Добавляет предложение ORDER BY с направлением ASC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки в отличие от order()
Поля сортировки не подходят для использования с данными, введёнными пользователем, так как они не проверяются генератором запросов.
Параметры
- строка|
Cake\Database\Expression\QueryExpression$field - Поле, по которому осуществляется сортировка.
- булево
$overwriteнеобязательно false - Нужно ли сбросить условия сортировки.
Возвращает
$this
orderDesc()source public
orderDesc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )
Добавляет предложение ORDER BY с направлением DESC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки в отличие от order()
Поля сортировки не подходят для использования с данными, введёнными пользователем, так как они не проверяются генератором запросов.
Параметры
- строка|
Cake\Database\Expression\QueryExpression$field - Поле, по которому осуществляется сортировка.
- булево
$overwriteнеобязательно false - Нужно ли сбросить условия сортировки.
Возвращает
$this
page()source public
page( integer $num , integer|null $limit = null )
Установите страницу результатов, которую вы хотите.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите как результаты. Если пусто, limit будет по умолчанию установлен на существующее ограничение, а если и оно пусто, то 25 будет использоваться.
Страницы должны начинаться с 1.
Параметры
- целое число
$num - Номер страницы, которую вы хотите.
- целое число|null
$limitнеобязательно null Количество строк, которое вы хотите на странице. Если null, будет использоваться текущее ограничение.
Возвращает
$this
Выбрасывает
InvalidArgumentExceptionЕсли номер страницы < 1.
removeJoin()source public
removeJoin( string $name )
Удаляет объединение, если оно было определено.
Полезно, когда вы переопределяете объединения или хотите изменить порядок условий объединения.
Параметры
- строка
$name - Псевдоним/имя объединения, которое нужно удалить.
Возвращает
$this
rightJoin()source public
rightJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )
Добавляет одиночное условие RIGHT JOIN к запросу.
Это сокращённый метод для построения объединений с помощью join().
Аргументы этого метода идентичны сокращённому методу leftJoin(), обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
- строка|массив
$table - Таблица для объединения.
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательно [] Условия для объединения.
- массив
$typesнеобязательно [] список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
rowCountAndClose()source public
rowCountAndClose( )
Выполняет SQL этого запроса и немедленно закрывает оператор, прежде чем вернуть количество строк изменённых записей.
Этот метод может использоваться с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчёта записей.
Пример
$rowCount = $query->update('articles')
->set(['published'=>true])
->where(['published'=>false])
->rowCountAndClose(); Вышеупомянутый пример установит значение поля published в true для всех записей с false и вернёт количество обновлённых записей.
Возвращает
целое числоselectTypeMap()source public устаревший
selectTypeMap( Cake\Database\TypeMap $typeMap = null )
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
При вызове без аргументов возвращается текущий объект TypeMap.
Устаревший
3.4.0 Используйте setSelectTypeMap()/getSelectTypeMap() вместо этого.Параметры
-
Cake\Database\TypeMap$typeMapнеобязательно null - Объект карты для использования
Возвращает
$this|\Cake\Database\TypeMap
set()source public
set( string|array|callable|Cake\Database\Expression\QueryExpression $key , mixed $value = null , array $types = [] )
Установить одно или несколько полей для обновления.
Примеры
Передача строки:
$query->update('articles')->set('title', 'The Title'); Передача массива:
$query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']); Передача вызова функции:
$query->update('articles')->set(function ($exp) {
return $exp->eq('title', 'The title', 'string');
}); Параметры
- строка|массив|вызов функции|
Cake\Database\Expression\QueryExpression$key Имя колонки или массив ключей + значений для установки. Это также может быть QueryExpression, содержащий SQL-фрагмент. Это также может быть вызов функции, который должен возвращать объект выражения.
- смешанный
$valueнеобязательно null Значение для обновления $key. Может быть null, если $key — массив или QueryExpression. Когда $key — массив, этот параметр будет использоваться как $types вместо него.
- массив
$typesнеобязательно [] - Типы колонок для обработки данных.
Возвращает
$this
setConnection()source public
setConnection( Cake\Database\Connection $connection )
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Параметры
-
Cake\Database\Connection$connection - Экземпляр подключения
Возвращает
$this
setSelectTypeMap()source public
setSelectTypeMap( Cake\Database\TypeMap $typeMap )
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
Параметры
-
Cake\Database\TypeMap$typeMap - Объект карты для использования
Возвращает
$this
setValueBinder()source public
setValueBinder( Cake\Database\ValueBinder|boolean $binder )
Перезаписывает текущий связыватель значений
ValueBinder отвечает за генерацию маркеров запроса и временное связывание значений с этими маркерами, чтобы они могли быть корректно переданы объекту оператора.
Параметры
- Cake\Database\ValueBinder|boolean
$binder - Связыватель или false для отключения связывания.
Возвращает
$this
traverse()source public
traverse( callable $visitor , array $parts = [] )
Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция обычно используется как способ обхода всех частей запроса, которые будут использоваться для построения запроса.
Обратный вызов получит 2 параметра, первый — значение части запроса, по которой итерируется, а второй — имя этой части.
Пример:
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
- вызов функции
$visitor - Функция или вызов функции, которая будет выполняться для каждой части.
- массив
$partsнеобязательно [] - Узлы запроса для обхода.
Возвращает
$this
Реализация
Cake\Database\ExpressionInterface::traverse() traverseExpressions()source public
traverseExpressions( callable $callback )
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный рекурсивный обход всего дерева выражений. Это запустит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося в этом запросе на любом уровне вложенности в любой части запроса.
Функция обратного вызова получит в качестве первого параметра текущее посещаемое выражение.
Параметры
- вызов функции
$callback функция, которая будет выполняться для каждого ExpressionInterface, найденного в этом запросе.
Возвращает
$this|null
type()source public
type( )
Возвращает тип этого запроса (select, insert, update, delete).
Возвращает
строкаunion()source public
union( string|Cake\Database\Query $query , boolean $overwrite = false )
Добавляет полный запрос для использования вместе с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов переданного запроса. Вы можете добавить столько запросов, сколько вам нужно, вызывая этот метод несколько раз с разными запросами.
По умолчанию оператор UNION удалит дублируемые строки, если вы хотите включить каждую строку для всех запросов, используйте unionAll().
Примеры
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->union($union);
Сгенерирует:
SELECT id, name FROM things d UNION SELECT id, title FROM articles a
Параметры
- строка|
Cake\Database\Query$query - полный SQL-запрос для использования в операторе UNION
- булево
$overwriteнеобязательно false - нужно ли сбросить список запросов для выполнения операции или нет
Возвращает
$this
unionAll()source public
unionAll( string|Cake\Database\Query $query , boolean $overwrite = false )
Добавляет полное условие запроса для использования в операторе UNION ALL с этим запросом. Используется для объединения набора результатов этого запроса с результатом прошедшего запроса. Вы можете добавить столько запросов, сколько нужно, вызывая этот метод несколько раз с разными запросами.
В отличие от UNION, UNION ALL не будет удалять дублирующиеся строки.
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
Результат:
SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a
Параметры
- string|
Cake\Database\Query$query - полный SQL запрос для использования в операторе UNION
- boolean
$overwriteoptional false - следует ли сбросить список запросов для обработки или нет
Возвращает
$this
valueBinder()source public deprecated
valueBinder( Cake\Database\ValueBinder|false|null $binder = null )
Возвращает текущий используемый экземпляр ValueBinder. Если значение передано, оно будет установлено как новый используемый экземпляр.
ValueBinder отвечает за генерацию заглушек запроса и временное связывание значений с этими заглушками, чтобы их можно было правильно передать в объект оператора.
Устаревшее
3.5.0 Используйте setValueBinder()/getValueBinder() вместо этого.Параметры
- Cake\Database\ValueBinder|false|null
$binderoptional null новый экземпляр для установки. Если значение не передано, будет возвращен стандартный
Возвращает
$this|\Cake\Database\ValueBinder
values()source public
values( array|Cake\Database\Query $data )
Устанавливает значения для запроса вставки.
Многократные вставки могут выполняться, вызывая values() более одного раза или предоставляя массив наборов значений. Кроме того, $data может быть экземпляром Query для вставки данных из другого запроса SELECT.
Параметры
- array|
Cake\Database\Query$data - Данные для вставки.
Возвращает
$this
Вызывает исключение
Cake\Database\Exceptionесли вы попытаетесь установить значения до объявления столбцов. Или если вы попытаетесь установить значения в запросы, отличные от вставки.
where()source public
where( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )
Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нем, значения массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждая запись будет объединена со всей остальной частью условий с помощью оператора AND. Последовательные вызовы этой функции также будут объединять новые заданные условия с помощью оператора AND. Кроме того, значения могут быть выражены с помощью объектов выражений, которые могут включать другие объекты запросов.
Любые условия, созданные с помощью этого метода, могут быть использованы с любыми типами запросов SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример генерирует:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Допустимые типы могут быть взяты из сопоставления с классом Database\Type.
Вложенные условия с союзами:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример генерирует:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия с союзами, сколько угодно. Иногда вам может потребоваться определить 2 разных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Что приведет к:
WHERE (published = false) OR (published = true)
Обратите внимание, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он объединит переданные условия с предыдущим сохраненным списком с помощью оператора AND. Кроме того, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не переопределит предыдущее значение.
Использование объектов выражений:
$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp); Предыдущий пример генерирует:
WHERE (id != 100 OR author_id != 1) AND published = 1
Другие объекты 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. Однако ключи не обрабатываются как небезопасные входные данные и должны быть проверены/разрешены.
Если вы используете строковые условия, убедитесь, что ваши значения правильно цитируются. Самое безопасное, что вы можете сделать, это никогда не использовать строковые условия.
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable|null$conditionsoptional null - Условия для фильтрации.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- boolean
$overwriteoptional false - следует ли сбрасывать условия с переданным списком или нет
Возвращает
$this
См.
Cake\Database\TypeCake\Database\Expression\QueryExpressionwhereInList()source public
whereInList( string $field , array $values , array $options = [] )
Добавляет условие IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры: - types - Ассоциативный массив имен типов, используемых для привязки значений к запросу - allowEmpty - Разрешить пустой массив.
Параметры
- string
$field - Поле
- array
$values - Массив значений
- array
$optionsoptional [] - Параметры
Возвращает
$this
whereNotInList()source public
whereNotInList( string $field , array $values , array $options = [] )
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры
- string
$field - Поле
- array
$values - Массив значений
- array
$optionsoptional [] - Параметры
Возвращает
$this
whereNotNull()source public
whereNotNull( array|string|Cake\Database\ExpressionInterface $fields )
Удобный метод, добавляющий условие NOT NULL в запрос
Параметры
- array|string|
Cake\Database\ExpressionInterface$fields - Одно поле или выражения или список полей, которые не должны быть NULL
Возвращает
$this
whereNull()source public
whereNull( array|string|Cake\Database\ExpressionInterface $fields )
Удобный метод, добавляющий условие IS NULL в запрос
Параметры
- array|string|
Cake\Database\ExpressionInterface$fields - Одно поле или выражения или список полей, которые должны быть NULL
Возвращает
$this
Методы, используемые из Cake\Datasource\QueryTrait
_decoratorClass()source protected
_decoratorClass( )
Возвращает имя класса, используемого для декорирования результатов
Возвращает
stringaliasField()source public
aliasField( string $field , string|null $alias = null )
Возвращает массив key => value, представляющий одно алиасовое поле, которое можно напрямую передать в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
Если поле уже имеет псевдоним, оно не будет изменено. Если $alias не передан, будет использоваться таблица по умолчанию для этого запроса.
Параметры
- string
$field - Поле для присвоения псевдонима
- string|null
$aliasoptional null - псевдоним, используемый для префикса поля
Возвращает
arrayaliasFields()source public
aliasFields( array $fields , string|null $defaultAlias = null )
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в одном массиве.
Параметры
- массив
$fields - Поля, которые нужно переименовать
- строка|null
$defaultAliasнеобязательно null - Значение по умолчанию для переименования
Возвращает
массивeagerLoaded()source public deprecated
eagerLoaded( boolean|null $value = null )
Устанавливает экземпляр запроса как запрос с неявной загрузкой. Если аргумент не передан, возвращается текущее значение настроенного запроса _eagerLoaded.
Устаревшее
3.5.0 Используйте isEagerLoaded() для получения значения вместо этого.Параметры
- boolean|null
$valueнеобязательно null - Необходимо ли выполнять неявную загрузку.
Возвращает
$this|boolean
first()source public
first( )
Возвращает первый результат выполнения этого запроса. Если запрос еще не был выполнен, он установит ограничение до 1 для повышения производительности.
Пример:
$singleUser = $query->select(['id', 'username'])->first();
Возвращает
Cake\Datasource\EntityInterface|массив|nullПервый результат из набора результатов.
firstOrFail()source public
firstOrFail( )
Получает первый результат из выполняемого запроса или вызывает исключение.
Возвращает
Cake\Datasource\EntityInterface|массивПервый результат из набора результатов.
Вызывает
Cake\Datasource\Exception\RecordNotFoundExceptionЕсли первый элемент отсутствует.
formatResults()source public
formatResults( callable $formatter = null , boolean|integer $mode = 0 )
Регистрирует новую функцию обратного вызова форматирования, которая должна выполняться при попытке извлечения результатов из базы данных.
Функции обратного вызова форматирования получат в качестве первого аргумента объект, реализующий \Cake\Collection\CollectionInterface, который можно просматривать и изменять по своему усмотрению.
Функции обратного вызова должны возвращать объект-итератор, который будет использоваться в качестве значения возврата результата этого запроса. Функции форматирования применяются после выполнения всех MapReduce процедур для этого запроса.
Если первый аргумент равен null, он вернет список ранее зарегистрированных процедур форматирования. Это устарело с версии 3.6.0 - используйте getResultFormatters() вместо этого.
Если второй аргумент равен 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 - Функция обратного вызова форматирования.
- boolean|integer
$modeнеобязательно 0 - Указывает, нужно ли перезаписать, добавить или добавить в начало функцию форматирования.
Возвращает
$this|массив
getIterator()source public
getIterator( )
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости вызывать execute() вручную, тем самым, делая его похожим на набор результатов, а не на сам запрос.
Возвращает
ИтераторgetMapReducers()source public
getMapReducers( )
Возвращает список ранее зарегистрированных процедур MapReduce.
Возвращает
массивgetOptions()source public
getOptions( )
Возвращает массив с настроенными параметрами, которые были применены к этому запросу и которые еще не были обработаны другим методом в этом классе.
Пример:
$query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']); $query->getOptions(); // Returns ['doABarrelRoll' => true]
Возвращает
массивСм.
\Cake\Datasource\QueryInterface::applyOptions() для информации о параметрах, которые будут обработаны этим классом и не будут возвращены этой функцией
getRepository()source public
getRepository( )
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в предложении from.
Возвращает
Cake\Datasource\RepositoryInterfacegetResultFormatters()source public
getResultFormatters( )
Возвращает список ранее зарегистрированных процедур форматирования.
Возвращает
массивisEagerLoaded()source public
isEagerLoaded( )
Возвращает текущее значение настроенного запроса _eagerLoaded.
Возвращает
booleanmapReduce()source public
mapReduce( callable $mapper = null , callable $reducer = null , boolean $overwrite = false )
Регистрирует новую процедуру MapReduce, которая будет выполняться поверх результатов базы данных. Обе функции обратного вызова, map и caller, должны быть вызываемыми объектами.
Маршрутизация MapReduce будет выполняться только при выполнении запроса и попытке извлечения первого результата.
Если первый аргумент равен null, он вернет список ранее зарегистрированных процедур map-reduce. Это устарело с версии 3.6.0 - используйте getMapReducers() вместо этого.
Если третий аргумент равен true, он удалит предыдущие функции map-reduce и заменит их переданными аргументами.
Параметры
- функция обратного вызова
$mapperнеобязательно null - Функция map.
- функция обратного вызова
$reducerнеобязательно null - Функция reduce.
- boolean
$overwriteнеобязательно false - Установите в true, чтобы перезаписать существующие функции map и reduce.
Возвращает
$this|массив
См.
\Cake\Collection\Iterator\MapReduce для получения информации о том, как использовать emit для передачи данных в map-reduce.repository()source public
repository( Cake\Datasource\RepositoryInterface $table = null )
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в предложении from.
При вызове с аргументом Table объект таблицы по умолчанию будет установлен, а этот объект запроса будет возвращен для цепочки вызовов.
Параметры
-
Cake\Datasource\RepositoryInterface$tableнеобязательно null - Объект таблицы по умолчанию для использования
Возвращает
$this|Cake\Datasource\QueryTrait$this
setResult()source public
setResult( Cake\Datasource\ResultSetInterface $results )
Устанавливает набор результатов для запроса.
Установка набора результатов запроса сделает execute() бесполезным. Вместо выполнения SQL-запроса и извлечения результатов будет возвращен набор результатов, переданный в этот метод.
Этот метод наиболее полезен в сочетании с результатами, хранящимися в кэше.
Параметры
-
Cake\Datasource\ResultSetInterface$results - Результаты, которые должен вернуть этот запрос.
Возвращает
$this
toArray()source public
toArray( )
Возвращает массивное представление результатов после выполнения запроса.
Возвращает
массивМетоды, используемые из Cake\Database\TypeMapTrait
defaultTypes()source public устаревшее
defaultTypes( array $types = null )
Позволяет задать типы по умолчанию при цепочке запросов
Устаревшее
3.4.0 Используйте setDefaultTypes()/getDefaultTypes() вместо этого.Параметры
- массив
$typesнеобязательный null - Массив типов для задания.
Возвращает
$this|массив
getDefaultTypes()source public
getDefaultTypes( )
Получает типы по умолчанию текущей карты типов.
Возвращает
массивgetTypeMap()source public
getTypeMap( )
Возвращает существующую карту типов.
Возвращает
Cake\Database\TypeMapsetDefaultTypes()source public
setDefaultTypes( array $types )
Позволяет задать типы по умолчанию при цепочке запросов.
Параметры
- массив
$types - Массив типов для задания.
Возвращает
$this
setTypeMap()source public
setTypeMap( array|Cake\Database\TypeMap $typeMap )
Создаёт новую карту типов, если $typeMap является массивом, иначе меняет её на указанную.
Параметры
- массив|
Cake\Database\TypeMap$typeMap - Создаёт карту типов, если это массив, иначе устанавливает заданную карту типов
Возвращает
$this
typeMap()source public устаревшее
typeMap( array|Cake\Database\TypeMap|null $typeMap = null )
Создаёт новую карту типов, если $typeMap является массивом, иначе возвращает существующую карту типов или меняет её на указанную.
Устаревшее
3.4.0 Используйте setTypeMap()/getTypeMap() вместо этого.Параметры
- массив|
Cake\Database\TypeMap|null$typeMapнеобязательный null - Создаёт карту типов, если это массив, иначе устанавливает заданную карту типов
Возвращает
$this|\Cake\Database\TypeMap
Краткое описание магических методов
Магические методы, унаследованные от Cake\Datasource\QueryInterface
getRepository() |
Подробности свойств
$_autoFieldssource
protected boolean
Отслеживает, должен ли исходный запрос включать поля из таблицы верхнего уровня.
$_beforeFindFiredsource
protected boolean
Истинно, если событие beforeFind уже было вызвана для этого запроса
false
$_countersource
protected callable
Функция, которая может использоваться для вычисления общего количества записей, которые будет соответствовать этому запросу, когда не используется limit
$_eagerLoadersource
protected Cake\ORM\EagerLoader
Экземпляр класса, ответственного за хранение содержаний ассоциаций и за их ленивую загрузку при выполнении этого запроса
$_hasFieldssource
protected boolean
Если пользователь выбрал какие-либо поля перед выполнением, это используется, чтобы определить, должны ли какие-либо поля быть автоматически выбраны.
$_resultsCountsource
protected integer|null
Значение COUNT(*) для запроса.
При установке выполнение запроса подсчёта будет пропущено.
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.6/class-Cake.ORM.Query.html