Spec-Zone.ru › CakePHP 3.8

Класс Query

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

Cake\Database\Query реализует Cake\Database\ExpressionInterface, IteratorAggregate использует Cake\Database\TypeMapTrait
Расширяется Cake\ORM\Query реализует JsonSerializable, Cake\Datasource\QueryInterface использует Cake\Datasource\QueryTrait
Пространство имён: Cake\ORM
См.: \Cake\Collection\CollectionInterface Для полного описания методов коллекции, поддерживаемых этим классом
Расположение: ORM/Query.php

Краткое описание констант

  • integer

    APPEND
    0
  • boolean

    OVERWRITE
    true
  • integer

    PREPEND
    1

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

  • JOIN_TYPE_INNER, JOIN_TYPE_LEFT, JOIN_TYPE_RIGHT

Краткое описание свойств

  • $_autoFields protected
    boolean

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

  • $_beforeFindFired protected
    boolean
    Истина, если событие beforeFind уже было вызвано для этого запроса
  • $_counter protected
    callable

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

  • $_eagerLoader protected
    Cake\ORM\EagerLoader

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

  • $_hasFields protected
    boolean

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

  • $_hydrate protected
    boolean
    Нужно ли гидратировать результаты в объекты сущностей
  • $_resultsCount protected
    integer|null
    Значение COUNT(*) для запроса.

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

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

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

  • autoFields() public deprecated
    Получить/Установить, автоматически ли ORM должен добавлять поля.
  • cache() public
  • cleanCopy() public
    Создает копию текущего запроса, вызывает передFind и сбрасывает некоторое состояние.
  • clearContain() public
    Очищает содержащие ассоциации из текущего запроса.
  • contain() public

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

  • count() public
    Возвращает общее количество результатов для запроса.
  • counter() public

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

  • delete() public
    Создать запрос на удаление.
  • disableAutoFields() public
    Отключает автоматическое добавление полей.
  • disableHydration() public
    Отключить гидратацию сущностей.
  • eagerLoader() public deprecated

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

  • enableAutoFields() public
    Устанавливает, автоматически ли ORM должен добавлять поля.
  • enableHydration() public
    Включить/выключить гидратацию сущностей.
  • find() public
    Применение пользовательских нахождений к существующему объекту запроса.
  • getContain() public
  • getEagerLoader() public
    Возвращает текущий настроенный экземпляр.
  • hydrate() public deprecated
    Включить/выключить гидратацию сущностей.
  • 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( )

Запрос клона объекта.

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

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

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

массив $associations
Вложенное дерево ассоциаций для обхода.

_addDefaultFields()source protected

_addDefaultFields( )

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

_addDefaultSelectTypes()source protected

_addDefaultSelectTypes( )

Устанавливает типы по умолчанию для преобразования полей в выборке

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

Параметры

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

Возвращает


$this

Реализация

Cake\Datasource\QueryInterface::applyOptions()

autoFields()source public deprecated

autoFields( boolean|null $value = null )

Получение/установка значения, указывающего, следует ли ORM автоматически добавлять поля.

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

Устарело

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

Параметры

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

Возвращает

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

cache()source public

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

Возвращает


$this

Выбрасывает

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

cleanCopy()source public

cleanCopy( )

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

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

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

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

Возвращает

Cake\ORM\Query

clearContain()source public

clearContain( )

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

Возвращает


$this
END_OF_DOCUMENT_MARKER ```

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, предыдущий список будет очищен.

Параметры

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

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

Возвращает

массив|Cake\ORM\Query
$this

count()source public

count( )

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

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

Возвращает

целое число

Реализация

Cake\Datasource\QueryInterface::count()

counter()source public

counter( callable|null $counter )

Регистрирует вызываемый объект, который будет выполнен при вызове метода count в этом запросе. Значение возврата функции будет установлено как значение возврата метода count.

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

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

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

Параметры

вызываемый объект|null $counter
Значение счётчика

Возвращает


$this

delete()source public

delete( string|null $table = null )

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

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

Параметры

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

Возвращает


$this

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

Cake\Database\Query::delete()

disableAutoFields()source public

disableAutoFields( )

Отключает автоматическое добавление полей.

Возвращает


$this

disableHydration()source public

disableHydration( )

Отключает гидратацию сущностей.

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

Возвращает


$this

eagerLoader()source public устаревший

eagerLoader( Cake\ORM\EagerLoader $instance = null )

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

Устаревший

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

Параметры

Cake\ORM\EagerLoader $instance необязательно null

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

Возвращает

Cake\ORM\EagerLoader|Cake\ORM\Query
$this

enableAutoFields()source public

enableAutoFields( boolean $value = true )

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

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

Параметры

логическое значение $value необязательно true
Установите в true, чтобы включить, в false — чтобы отключить.

Возвращает


$this

enableHydration()source public

enableHydration( boolean $enable = true )

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

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

Параметры

логическое значение $enable необязательно true
Используйте логическое значение для установки режима гидратации.

Возвращает


$this

find()source public

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

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

Параметры

строка $finder
Метод поиска, который нужно использовать.
массив $options необязательно []
Параметры для метода поиска.

Возвращает


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

См. также

\Cake\ORM\Table::find()

Реализация

Cake\Datasource\QueryInterface::find()

getContain()source public

getContain( )

Возвращает

массив

getEagerLoader()source public

getEagerLoader( )

Возвращает текущий настроенный экземпляр.

Возвращает

Cake\ORM\EagerLoader

hydrate()source public устаревший

hydrate( boolean|null $enable = null )

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

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

Устаревший

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

Параметры

логическое значение|null $enable необязательно null

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

Возвращает

логическое значение|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(), с той разницей, что она не будет выбирать поля из ассоциации.

Параметры

строка $assoc
Ассоциация для объединения
вызов функции $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( )

Возвращает текущий режим гидрации.

Возвращает

boolean

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'])
    ->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 запроса. Переданные поля исключения не должны быть алиасами. После первого вызова этого метода второй вызов не может быть использован для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте логическое значение overwrite true, что сбросит предложение 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 )

Устанавливает экземпляр класса загрузчика для eager loading, используемого для загрузки ассоциаций и хранения содержимого.

Параметры

Cake\ORM\EagerLoader $instance
Загрузчик eager loading для использования.

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


$this

sql()source public

sql( Cake\Database\ValueBinder $binder = null )

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

Параметры

Cake\Database\ValueBinder $binder optional null

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

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

string

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

Cake\Database\Query::sql()

triggerBeforeFind()source public

triggerBeforeFind( )

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

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

update()source public

update( string|null $table = null )

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

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

Параметры

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

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


$this

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

Cake\Database\Query::update()

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

__toString()source public

__toString( )

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

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

string

_conjugate()source protected

_conjugate( string $part , string|null|array|Cake\Database\ExpressionInterface|callable $append , string $conjunction , array $types )

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

Параметры

string $part
Имя части запроса, к которой нужно добавить новую часть
string|null|array|Cake\Database\ExpressionInterface|callable $append
Выражение или функция-строитель для добавления.
string $conjunction
Тип конъюнкции для выполнения операции с частью
array $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, описывающему единственное условие объединения.

Параметры

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

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

string $type
тип объединения

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

array

andHaving()source public

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

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

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

Параметры

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

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


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

Параметры

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

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


$this

См. также

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

bind()source public

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

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

$query->bind(':id', 1, 'integer');

Параметры

string|integer $param

заполнитель, который будет заменен на процитированную версию $value

mixed $value
Значение, которое нужно привязать
string|integer $type optional 'string'

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

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


$this

bufferResults()source public deprecated

bufferResults( boolean|null $enable = null )

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

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

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

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

Deprecated

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

Параметры

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

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

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

Параметры

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

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

mixed

Исключение

InvalidArgumentException
Когда указанного предложения нет.

connection()source public deprecated

connection( Cake\Database\Connection|null $connection = null )

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

Устаревшее

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

Параметры

Cake\Database\Connection|null $connection необязательно null
Экземпляр подключения

Возвращает


$this|\Cake\Database\Connection

decorateResults()source public

decorateResults( callable|null $callback , boolean $overwrite = false )

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

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

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

Если вы хотите удалить все декораторы из стека, установите первый параметр в null, а второй — в true.

Пример

$query->decorateResults(function ($row) {
  $row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
   return $row;
});

Параметры

callable|null $callback
Обратный вызов, который нужно вызвать при извлечении результатов.
boolean $overwrite необязательно false
Определяет, следует ли добавить или заменить все существующие декораторы.

Возвращает


$this

disableBufferedResults()source public

disableBufferedResults( )

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

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

Возвращает


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

Параметры

array|Cake\Database\ExpressionInterface|string|boolean $on необязательно []

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

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

Возвращает


$this

enableBufferedResults()source public

enableBufferedResults( boolean $enable = true )

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

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

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

Параметры

boolean $enable необязательно 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-код в сыром виде и не подходит для использования с данными, предоставляемыми пользователем.

Параметры

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

Возвращает


$this

execute()source public

execute( )

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

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

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

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

Возвращает

Cake\Database\StatementInterface

from()source public

from( array|string $tables = [] , boolean $overwrite = false )

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

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

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

Этот метод можно использовать для запросов select, update и delete.

Примеры:

$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub

Параметры

array|string $tables необязательно []

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

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

Возвращает


$this|array

func()source public

func( )

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

Пример:

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

Возвращает

Cake\Database\FunctionsBuilder

getConnection()source public

getConnection( )

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

Возвращает

Cake\Database\Connection

getIterator()source public

getIterator( )

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

Возвращает

Cake\Database\StatementInterface|null

Реализация

IteratorAggregate::getIterator()

getSelectTypeMap()source public

getSelectTypeMap( )

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

Возвращает

Cake\Database\TypeMap

getValueBinder()source public

getValueBinder( )

Возвращает текущий используемый экземпляр ValueBinder.

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

Возвращает

Cake\Database\ValueBinder
END_OF_DOCUMENT_MARKER

group()source public

group( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite = false )

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

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

Примеры:

// Produces GROUP BY id, title
$query->group(['id', 'title']);

// Produces GROUP BY title
$query->group('title');

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

Параметры

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

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


$this

having()source public

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

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

Поля 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\ExpressionInterface

innerJoin()source public

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

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

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

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

Параметры

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

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

массив $types необязательно []

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

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


$this

into()source public

into( string $table )

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

Параметры

строка $table
Имя таблицы, в которую нужно вставить данные.

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


$this

isBufferedResultsEnabled()source public

isBufferedResultsEnabled( )

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

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

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

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

boolean

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']) даст 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\Type

leftJoin()source public

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

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

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

Имя таблицы можно передать как строку или как массив в случае необходимости псевдонима:

// LEFT JOIN authors ON authors.id = posts.author_id
$query->leftJoin('authors', 'authors.id = posts.author_id');

// LEFT JOIN authors a ON a.id = posts.author_id
$query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id');

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

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

См. join() для получения дополнительной информации об условиях и типах.

Параметры

строка|массив $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\QueryExpression

offset()source public

offset( integer|Cake\Database\ExpressionInterface $num )

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

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

Примеры

$query->offset(10) // generates OFFSET 10
$query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)

Параметры

целое число|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\Type

order()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 будет по умолчанию равен существующему предложению limit, а если и оно пустое, то 25 будет использоваться.

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

Параметры

целое число $num
Номер страницы, которую вы хотите.
целое число|null $limit необязательный null

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

Возвращает


$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 и вернёт количество обновлённых записей.

Возвращает

integer

selectTypeMap()source public deprecated

selectTypeMap( Cake\Database\TypeMap $typeMap = null )

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

При вызове без аргументов возвращается текущий объект 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');
});

Параметры

string|array|callable|Cake\Database\Expression\QueryExpression $key

Имя столбца или массив ключей + значений для установки. Также может быть QueryExpression, содержащий SQL-фрагмент. Также может быть вызываемым объектом, который должен возвращать объект выражения.

mixed $value необязательно null

Значение для обновления $key. Может быть null, если $key — массив или QueryExpression. Если $key — массив, этот параметр будет использован как $types.

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

Возвращает


$this

setConnection()source public

setConnection( Cake\Database\Connection $connection )

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

Параметры

Cake\Database\Connection $connection
Экземпляр соединения

Возвращает


$this

setSelectTypeMap()source public

setSelectTypeMap( Cake\Database\TypeMap $typeMap )

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

Параметры

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

Параметры

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

Возвращает


$this

Реализация

Cake\Database\ExpressionInterface::traverse()

traverseExpressions()source public

traverseExpressions( callable $callback )

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

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

Параметры

callable $callback

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

Возвращает


$this|null

type()source public

type( )

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

Возвращает

string

union()source public

union( string|Cake\Database\Query $query , boolean $overwrite = false )

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

По умолчанию оператор UNION удалит дублирующие строки. Если вы хотите включить каждую строку для всех запросов, используйте unionAll().

Примеры

$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
$query->select(['id', 'name'])->from(['d' => 'things'])->union($union);

Создаст:

SELECT id, name FROM things d UNION SELECT id, title FROM articles a

Параметры

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

Возвращает


$this

unionAll()source public

unionAll( string|Cake\Database\Query $query , boolean $overwrite = false )

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

В отличие от UNION, UNION ALL не удаляет дублирующие строки.

$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
$query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);

Создаст:

SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a

Параметры

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

Возвращает


$this

valueBinder()source public deprecated

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

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

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

Устарело

3.5.0 Используйте setValueBinder()/getValueBinder() вместо этого.

Параметры

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

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

Возвращает


$this|\Cake\Database\ValueBinder

values()source public

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

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

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

Параметры

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

Возвращает


$this

Исключение

Cake\Database\Exception

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


where()source public

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

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

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

Любые условия, созданные с помощью этого метода, могут быть использованы с любым SELECT, UPDATE и DELETE типом запросов.

Условия с использованием операторов:

$query->where([
    'posted >=' => new DateTime('3 days ago'),
    'title LIKE' => 'Hello W%',
    'author_id' => 1,
], ['posted' => 'datetime']);

Предыдущий пример приводит к:

WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1

Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Действительные типы могут быть взяты из сопоставленного с классом Database\Type.

Вложение условий с союзами:

$query->where([
    'author_id !=' => 1,
    'OR' => ['published' => true, 'posted <' => new DateTime('now')],
    'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime']

Предыдущий пример приводит к:

WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')

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

$query->where(['OR' => [['published' => false], ['published' => true]])

Что приведёт к:

WHERE (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

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

Добавление условий в несколько этапов:

Вы можете использовать вызываемые функции для построения сложных выражений, функции принимают в качестве первого аргумента новый объект 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 $conditions необязательный null
Условия для фильтрации.
array $types необязательный []
ассоциативный массив имён типов, используемых для привязки значений к запросу
boolean $overwrite необязательный false
нужно ли сбрасывать условия переданным списком или нет

Возвращает


$this

См. также

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

whereInList()source public

whereInList( string $field , array $values , array $options = [] )

Добавляет условие IN или набор условий, которые будут использованы в предложении WHERE для данного запроса.

Этот метод позволяет использовать пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны, используя его без надлежащей проверки.

Опции: - types - Ассоциативный массив имён типов, используемых для привязки значений к запросу - allowEmpty - Разрешить пустой массив.

Параметры

string $field
Поле
array $values
Массив значений
array $options необязательный []
Опции

Возвращает


$this

whereNotInList()source public

whereNotInList( string $field , array $values , array $options = [] )

Добавляет условие NOT IN или набор условий, которые будут использованы в предложении WHERE для данного запроса.

Этот метод позволяет использовать пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны, используя его без надлежащей проверки.

Параметры

string $field
Поле
array $values
Массив значений
array $options необязательный []
Опции

Возвращает


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

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

Возвращает

string

aliasField()source public

aliasField( string $field , string|null $alias = null )

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

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

Параметры

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

Возвращает

array

aliasFields()source public

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

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

Параметры

array $fields
Поля для алиаса
string|null $defaultAlias необязательный null
Стандартный алиас

Возвращает

array

eagerLoaded()source public устаревшее

eagerLoaded( boolean|null $value = null )

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

Устаревшее

3.5.0 Используйте isEagerLoaded() для получения части вместо этого.

Параметры

boolean|null $value необязательный null
Загрузка с ленивой загрузкой или нет.

Возвращает


$this|bool

first()source public

first( )

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

Пример:

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

Возвращает

Cake\Datasource\EntityInterface|array|null
Первый результат из ResultSet.

firstOrFail()source public

firstOrFail( )

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

Возвращает

Cake\Datasource\EntityInterface|array
Первый результат из ResultSet.

Исключения

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

Параметры

callable $formatter необязательно null
Функция форматирования.
boolean|integer $mode необязательно 0
Указывает, нужно ли перезаписывать, добавлять или вставлять перед существующими функциями форматирования.

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


$this|массив

getIterator()source public

getIterator( )

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

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

Итератор

getMapReducers()source public

getMapReducers( )

Возвращает список ранее зарегистрированных процедур map reduce.

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

массив

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\RepositoryInterface

getResultFormatters()source public

getResultFormatters( )

Возвращает список ранее зарегистрированных процедур форматирования.

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

массив

isEagerLoaded()source public

isEagerLoaded( )

Возвращает текущее значение настроенного запроса _eagerLoaded

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

boolean

mapReduce()source public

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

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

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

Если первый аргумент установлен в null, он вернёт список ранее зарегистрированных процедур map reduce. Это устарело начиная с 3.6.0 - используйте getMapReducers() вместо этого.

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

Параметры

callable $mapper необязательно null
Функция mapper.
callable $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
Объект таблицы по умолчанию для использования

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

Cake\Datasource\RepositoryInterface|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 deprecated

defaultTypes( array $types = null )

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

Устаревшее

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

Параметры

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

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


$this|массив

getDefaultTypes()source public

getDefaultTypes( )

Получает типы по умолчанию текущей карты типов.

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

массив

getTypeMap()source public

getTypeMap( )

Возвращает существующую карту типов.

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

Cake\Database\TypeMap

setDefaultTypes()source public

setDefaultTypes( array $types )

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

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

Чтобы добавить тип по умолчанию без перезаписи существующих, используйте getTypeMap()->addDefaults()

Параметры

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

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


$this

См.

\Cake\Database\TypeMap::setDefaults()

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, если $typeMap является массивом, в противном случае возвращает существующую карту типов или меняет её на заданную.

Устаревший

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

Параметры

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

Возвращает


$this|\Cake\Database\TypeMap

Краткое описание магических методов

append()source public

append( array|Traversable $items )

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

Параметры

array|Traversable $items

Возвращает

Cake\Collection\CollectionInterface

chunk()source public

chunk( $size )

Группирует результаты в массивы по $size строк каждый.

Параметры

$size

Возвращает

Cake\Collection\CollectionInterface

combine()source public

combine( $k , $v , $g = )

Возвращает значения столбца $v, индексированные столбцом $k, сгруппированные по $g.

Параметры

$k
$v
$g optional

Возвращает

Cake\Collection\CollectionInterface

countBy()source public

countBy( string|callable $field )

Возвращает количество уникальных значений для столбца

Параметры

string|callable $field

Возвращает

Cake\Collection\CollectionInterface

each()source public

each( callable $c )

Передает каждый результат запроса в вызываемый объект.

Параметры

callable $c

Возвращает

Cake\Collection\CollectionInterface

every()source public

every( callable $c )

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

Параметры

callable $c

Возвращает

boolean

extract()source public

extract( $field )

Извлекает один столбец из каждой строки.

Параметры

$field

Возвращает

Cake\Collection\CollectionInterface

filter()source public

filter( callable $c = )

Оставляет результаты, прошедшие проверку вызываемого объекта.

Параметры

callable $c optional

Возвращает

Cake\Collection\CollectionInterface

groupBy()source public

groupBy( string|callable $field )

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

Параметры

string|callable $field

Возвращает

Cake\Collection\CollectionInterface

indexBy()source public

indexBy( string|callable $field )

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

Параметры

string|callable $field

Возвращает

Cake\Collection\CollectionInterface

isEmpty()source public

isEmpty( )

Возвращает true, если в результате запроса нет данных.

Возвращает

boolean

last()source public

last( )

Возвращает последнюю строку результата запроса

Возвращает

mixed

map()source public

map( callable $c )

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

Параметры

callable $c

Возвращает

Cake\Collection\CollectionInterface

max()source public

max( $field , $type = )

Возвращает максимальное значение для одного столбца во всех результатах.

Параметры

$field
$type optional

Возвращает

mixed

min()source public

min( $field , $type = )

Возвращает минимальное значение для одного столбца во всех результатах.

Параметры

$field
$type optional

Возвращает

mixed

nest()source public

nest( $k , $p , $n = )

Создает древовидную структуру, вложенную значения столбца $p в тот же столбец, имеющий одинаковое значение для $k, используя $n в качестве ключа вложенности.

Параметры

$k
$p
$n optional

Возвращает

Cake\Collection\CollectionInterface

reduce()source public

reduce( callable $c , $zero = )

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

Параметры

callable $c
$zero optional

Возвращает

mixed

reject()source public

reject( callable $c )

Удаляет результаты, прошедшие проверку вызываемого объекта.

Параметры

callable $c

Возвращает

Cake\Collection\CollectionInterface

sample()source public

sample( $size = )

Перемешивает результаты в памяти и возвращает подмножество.

Параметры

$size optional

Возвращает

Cake\Collection\CollectionInterface

shuffle()source public

shuffle( )

Случайно меняет порядок возвращаемых результатов.

Возвращает

Cake\Collection\CollectionInterface

skip()source public

skip( integer $howMany )

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

Параметры

integer $howMany

Возвращает

Cake\Collection\CollectionInterface

some()source public

some( callable $c )

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

Параметры

callable $c

Возвращает

boolean

sortBy()source public

sortBy( $callback , $dir = , $type = )

Сортирует результат запроса с помощью обратного вызова.

Параметры

$callback
$dir optional
$type optional

Возвращает

Cake\Collection\CollectionInterface

stopWhen()source public

stopWhen( callable $c )

Возвращает каждую строку до тех пор, пока вызываемый объект не вернет true.

Параметры

callable $c

Возвращает

Cake\Collection\CollectionInterface

sumOf()source public

sumOf( string|callable $field )

Возвращает сумму всех значений для одного столбца.

Параметры

string|callable $field

Возвращает

float

take()source public

take( $size = , $from )

Ограничение и смещение результатов запроса в памяти.

Параметры

$size optional
$from

Возвращает

Cake\Collection\CollectionInterface

toArray()source public

toArray( )

Возвращает массив ключ-значение с результатами этого запроса.

Возвращает

array

Implementation of

Cake\Datasource\QueryInterface::toArray()

toList()source public

toList( )

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

Возвращает

array

zip()source public

zip( array|Traversable $c )

Возвращает первый результат и запроса, и $c в массиве, затем второй результат и так далее.

Параметры

array|Traversable $c

Возвращает

Cake\Collection\CollectionInterface

zipWith()source public

zipWith( $collections , callable $callable )

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

Параметры

$collections
callable $callable

Возвращает

Cake\Collection\CollectionInterface

Магические методы, унаследованные от Cake\Datasource\QueryInterface

getRepository()

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

$_autoFieldssource

protected boolean

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

$_beforeFindFiredsource

protected boolean

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

false

$_countersource

protected callable

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

$_eagerLoadersource

protected Cake\ORM\EagerLoader

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

$_hasFieldssource

protected boolean

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

$_hydratesource

protected boolean

Следует ли гидратировать результаты в объекты сущностей

true

$_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.8/class-Cake.ORM.Query.html

Spec-Zone.ru

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