Spec-Zone.ru › CakePHP 3.6

Класс Query

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

Cake\Database\Query implements Cake\Database\ExpressionInterface, IteratorAggregate uses Cake\Database\TypeMapTrait
Extended by Cake\ORM\Query implements JsonSerializable, Cake\Datasource\QueryInterface uses Cake\Datasource\QueryTrait
Пространство имён: Cake\ORM
См.: \Cake\Collection\CollectionInterface Для полного описания методов коллекции, поддерживаемых этим классом
Mixin: \Cake\Datasource\QueryTrait
Расположение: 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

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

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

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

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

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

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

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

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

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

Cake\Database\Query::__clone()

__construct()source public

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

Конструктор

Параметры

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

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

Cake\Database\Query::__construct()

__debugInfo()source public

__debugInfo( )

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

Возвращает

array

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

Cake\Database\Query::__debugInfo()

_addAssociationsToTypeMap()source protected

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

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

Параметры

Cake\ORM\Table $table
Экземпляр таблицы для извлечения ассоциаций.
Cake\Database\TypeMap $typeMap

Карта типов для проверки столбцов. Эта карта типов косвенно изменяется через Cake\ORM\Query::addDefaultTypes()

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

_addDefaultFields()source protected

_addDefaultFields( )

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

_addDefaultSelectTypes()source protected

_addDefaultSelectTypes( )

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

_decorateResults()source protected

_decorateResults( Traversable $result )

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

Параметры

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

Возвращает

Cake\Datasource\ResultSetInterface

_dirty()source protected

_dirty( )

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

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

Cake\Database\Query::_dirty()

_execute()source protected

_execute( )

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

Возвращает

Cake\ORM\ResultSet

_performCount()source protected

_performCount( )

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

Возвращает

integer

_transformQuery()source protected

_transformQuery( )

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

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

Также устанавливает типы по умолчанию для столбцов в предложении SELECT

См. также

\Cake\Database\Query::execute()

addDefaultTypes()source public

addDefaultTypes( Cake\ORM\Table $table )

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

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

Параметры

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

Возвращает


$this

all()source public

all( )

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

Возвращает

Cake\Datasource\ResultSetInterface

Исключения

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

Реализация

Cake\Datasource\QueryInterface::all()

applyOptions()source public

applyOptions( array $options )

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

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

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

Пример:

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

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

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

Параметры

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

Возвращает


$this

Реализация

Cake\Datasource\QueryInterface::applyOptions()

autoFields()source public deprecated

autoFields( boolean|null $value = null )

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

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

Устарело

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

Параметры

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

Возвращает

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

cache()source public

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

Возвращает


$this

Исключения

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

cleanCopy()source public

cleanCopy( )

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

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

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

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

Возвращает

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

Параметры

array|string|null $associations необязательно null
Список псевдонимов таблиц, которые должны быть запрошены.
callable|boolean $override необязательно false

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

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

array|Cake\ORM\Query
$this

count()source public

count( )

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

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

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

integer

Реализация

Cake\Datasource\QueryInterface::count()

counter()source public

counter( callable|null $counter )

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

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

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

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

Параметры

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

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


$this

delete()source public

delete( string|null $table = null )

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

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

Параметры

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

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


$this

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

Cake\Database\Query::delete()

eagerLoader()source public deprecated

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

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

Устарело

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

Параметры

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

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

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

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

enableAutoFields()source public

enableAutoFields( boolean $value = true )

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

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

Параметры

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

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


$this

enableHydration()source public

enableHydration( boolean $enable = true )

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

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

Параметры

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

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


$this

find()source public

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

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

Параметры

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

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


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

См. также

\Cake\ORM\Table::find()

Реализация

Cake\Datasource\QueryInterface::find()

getContain()source public

getContain( )

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

array

getEagerLoader()source public

getEagerLoader( )

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

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

Cake\ORM\EagerLoader

hydrate()source public deprecated

hydrate( boolean|null $enable = null )

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

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

Устарело

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

Параметры

boolean|null $enable необязательно null

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

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

boolean|Cake\ORM\Query
$this (булево при чтении, $this при установке режима).

innerJoinWith()source public

innerJoinWith( string $assoc , callable $builder = null )

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

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

Пример:

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

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

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

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

Параметры

string $assoc
Ассоциация для объединения
callable $builder необязательно null

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

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


$this

См. также

\Cake\ORM\Query::matching()
END_OF_DOCUMENT_MARKER

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

Параметры

Cake\ORM\Table|Cake\ORM\Association $table
Таблица для получения массива столбцов
массив $excludedFields
Имена столбцов без алиасов, которые вы не хотите выбирать из $table
boolean $overwrite необязательно false
Нужно ли сбрасывать/удалять ранее выбранные поля

Возвращает

Cake\ORM\Query

Выбрасывает

InvalidArgumentException
Если Association|Table не передана в первом аргументе

setEagerLoader()source public

setEagerLoader( Cake\ORM\EagerLoader $instance )

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

Параметры

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

Возвращает


$this

sql()source public

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

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

Параметры

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

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

Возвращает

строка

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

Cake\Database\Query::sql()

triggerBeforeFind()source public

triggerBeforeFind( )

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

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

update()source public

update( string|null $table = null )

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

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

Параметры

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

Возвращает


$this

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

Cake\Database\Query::update()

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

__toString()source public

__toString( )

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

Возвращает

строка

_conjugate()source protected

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

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

Параметры

строка $part
Имя части запроса, к которой нужно добавить новую часть
строка|null|массив|Cake\Database\ExpressionInterface|замыкание $append
Выражение или функция-строитель, которую нужно добавить.
строка $conjunction
Тип союза, который нужно использовать для обработки части
массив $types
Ассоциативный массив имен типов, используемых для привязки значений к запросу

_decorateStatement()source protected

_decorateStatement( Cake\Database\StatementInterface $statement )

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

Параметры

Cake\Database\StatementInterface $statement
объект для обработки

Возвращает

Cake\Database\Statement\CallbackStatement

_makeJoin()source protected

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

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

Параметры

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

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

строка $type
тип соединения

Возвращает

массив

andHaving()source public

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

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

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

Параметры

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

Возвращает


$this

См. также

\Cake\Database\Query::andWhere()

andWhere()source public

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

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

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

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

Примеры:

$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);

Произведёт:

WHERE title = 'Hello World' AND author_id = 1

$query
  ->where(['OR' => ['published' => false, 'published is NULL']])
  ->andWhere(['author_id' => 1, 'comments_count >' => 10])

Производит:

WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10

$query
  ->where(['title' => 'Foo'])
  ->andWhere(function ($exp, $query) {
    return $exp
      ->or_(['author_id' => 1])
      ->add(['author_id' => 2]);
  });

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

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

Параметры

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

Возвращает


$this

См. также

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

bind()source public

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

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

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

$query->bind(':id', [1, 2, 3], 'int[]');

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

Параметры

строка|целое число $param

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

смешанное $value
Связываемое значение
строка|целое число $type необязательно 'строка'

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

Возвращает


$this

bufferResults()source public deprecated

bufferResults( boolean|null $enable = null )

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

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

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

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

Устарело

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

Параметры

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

Возвращает

булево|Cake\Database\Query
$this
END_OF_DOCUMENT_MARKER

clause()source public

clause( string $name )

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

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

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

Параметры

строка $name
Имя фрагмента, который нужно вернуть

Возвращает

mixed

Исключение

InvalidArgumentException
При отсутствии указанного фрагмента.

connection()source public deprecated

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

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

Deprecated

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

Параметры

Cake\Database\Connection|null $connection optional 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 optional false
Включает ли это добавление или замену всех существующих декораторов.

Возвращает


$this

disableResultsCasting()source public

disableResultsCasting( )

Отключает автоматическое приведение типов полей к соответствующему типу данных PHP

Возвращает


$this

distinct()source public

distinct( array|Cake\Database\ExpressionInterface|string|boolean $on = [] , boolean $overwrite = false )

Добавляет фрагмент DISTINCT в запрос для удаления дубликатов из набора результатов. Этот фрагмент можно использовать только для операторов select.

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

Примеры:

// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();

// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');

// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true);

Параметры

массив|Cake\Database\ExpressionInterface|строка|boolean $on optional []

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

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

Возвращает


$this

enableBufferedResults()source public

enableBufferedResults( boolean $enable = true )

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

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

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

Параметры

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

Возвращает


$this

enableResultsCasting()source public

enableResultsCasting( )

Включает автоматическое приведение типов полей к соответствующему типу

Возвращает


$this

epilog()source public

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

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

Примеры:

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

Содержимое эпилога — это необработанный SQL-код и не подходит для использования с данными, предоставленными пользователем.

Параметры

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

Возвращает


$this

execute()source public

execute( )

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

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

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

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

Возвращает

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

Параметры

массив|строка $tables optional []

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

boolean $overwrite optional false
Сбрасывать ли таблицы с переданным списком или нет

Возвращает


$this|массив

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

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
END_OF_DOCUMENT_MARKER

page()source public

page( integer $num , integer|null $limit = null )

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

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

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

Параметры

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

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

Возвращает


$this

Выбрасывает

InvalidArgumentException
Если номер страницы < 1.

removeJoin()source public

removeJoin( string $name )

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

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

Параметры

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

Возвращает


$this

rightJoin()source public

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

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

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

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

Параметры

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

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

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

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

Возвращает


$this

rowCountAndClose()source public

rowCountAndClose( )

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

Этот метод может использоваться с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчёта записей.

Пример

$rowCount = $query->update('articles')
                ->set(['published'=>true])
                ->where(['published'=>false])
                ->rowCountAndClose();

Вышеупомянутый пример установит значение поля published в true для всех записей с false и вернёт количество обновлённых записей.

Возвращает

целое число

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

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

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

При вызове без аргументов возвращается текущий объект TypeMap.

Устаревший

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

Параметры

Cake\Database\TypeMap $typeMap необязательно null
Объект карты для использования

Возвращает


$this|\Cake\Database\TypeMap

set()source public

set( string|array|callable|Cake\Database\Expression\QueryExpression $key , mixed $value = null , array $types = [] )

Установить одно или несколько полей для обновления.

Примеры

Передача строки:

$query->update('articles')->set('title', 'The Title');

Передача массива:

$query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']);

Передача вызова функции:

$query->update('articles')->set(function ($exp) {
  return $exp->eq('title', 'The title', 'string');
});

Параметры

строка|массив|вызов функции|Cake\Database\Expression\QueryExpression $key

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

смешанный $value необязательно null

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

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

Возвращает


$this

setConnection()source public

setConnection( Cake\Database\Connection $connection )

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

Параметры

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

Возвращает


$this

setSelectTypeMap()source public

setSelectTypeMap( Cake\Database\TypeMap $typeMap )

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

Параметры

Cake\Database\TypeMap $typeMap
Объект карты для использования

Возвращает


$this

setValueBinder()source public

setValueBinder( Cake\Database\ValueBinder|boolean $binder )

Перезаписывает текущий связыватель значений

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

Параметры

Cake\Database\ValueBinder|boolean $binder
Связыватель или false для отключения связывания.

Возвращает


$this

traverse()source public

traverse( callable $visitor , array $parts = [] )

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

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

Пример:

$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
    if ($clause === 'select') {
        var_dump($value);
    }
}, ['select', 'from']);

Параметры

вызов функции $visitor
Функция или вызов функции, которая будет выполняться для каждой части.
массив $parts необязательно []
Узлы запроса для обхода.

Возвращает


$this

Реализация

Cake\Database\ExpressionInterface::traverse()

traverseExpressions()source public

traverseExpressions( callable $callback )

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

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

Параметры

вызов функции $callback

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

Возвращает


$this|null

type()source public

type( )

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

Возвращает

строка

union()source public

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

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

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

Примеры

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

Сгенерирует:

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

Параметры

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

Возвращает


$this
END_OF_DOCUMENT_MARKER

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 optional 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 optional null

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

Возвращает


$this|\Cake\Database\ValueBinder

values()source public

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

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

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

Параметры

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

Возвращает


$this

Вызывает исключение

Cake\Database\Exception

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


where()source public

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

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

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

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

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

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

Предыдущий пример генерирует:

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

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

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

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

Предыдущий пример генерирует:

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

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

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

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

WHERE (published = false) OR (published = true)

Обратите внимание, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он объединит переданные условия с предыдущим сохраненным списком с помощью оператора AND. Кроме того, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не переопределит предыдущее значение.

Использование объектов выражений:

$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp);

Предыдущий пример генерирует:

WHERE (id != 100 OR author_id != 1) AND published = 1

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

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

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

$query
  ->where(['title !=' => 'Hello World'])
  ->where(function ($exp, $query) {
    $or = $exp->or_(['id' => 1]);
    $and = $exp->and_(['id >' => 2, 'id <' => 10]);
   return $or->add($and);
  });
  • Предыдущий пример генерирует:

WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))

Условия в виде строк:

$query->where(['articles.author_id = authors.id', 'modified IS NULL']);

Предыдущий пример генерирует:

WHERE articles.author_id = authors.id AND modified IS NULL

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

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

Параметры

string|array|Cake\Database\ExpressionInterface|callable|null $conditions optional null
Условия для фильтрации.
array $types optional []
ассоциативный массив имен типов, используемых для привязки значений к запросу
boolean $overwrite optional 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 optional []
Параметры

Возвращает


$this

whereNotInList()source public

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

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

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

Параметры

string $field
Поле
array $values
Массив значений
array $options optional []
Параметры

Возвращает


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

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

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

Параметры

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

Возвращает

array

aliasFields()source public

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

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

Параметры

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

Возвращает

массив

eagerLoaded()source public deprecated

eagerLoaded( boolean|null $value = null )

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

Устаревшее

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

Параметры

boolean|null $value необязательно null
Необходимо ли выполнять неявную загрузку.

Возвращает


$this|boolean

first()source public

first( )

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

Пример:

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

Возвращает

Cake\Datasource\EntityInterface|массив|null
Первый результат из набора результатов.

firstOrFail()source public

firstOrFail( )

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

Возвращает

Cake\Datasource\EntityInterface|массив
Первый результат из набора результатов.

Вызывает

Cake\Datasource\Exception\RecordNotFoundException
Если первый элемент отсутствует.

formatResults()source public

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

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

Функции обратного вызова форматирования получат в качестве первого аргумента объект, реализующий \Cake\Collection\CollectionInterface, который можно просматривать и изменять по своему усмотрению.

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

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

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

Пример:

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

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

Параметры

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

Возвращает


$this|массив

getIterator()source public

getIterator( )

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

Возвращает

Итератор

getMapReducers()source public

getMapReducers( )

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

Возвращает

массив

getOptions()source public

getOptions( )

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

Пример:

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

Возвращает

массив

См.

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


getRepository()source public

getRepository( )

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

Возвращает

Cake\Datasource\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, которая будет выполняться поверх результатов базы данных. Обе функции обратного вызова, map и caller, должны быть вызываемыми объектами.

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

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

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

Параметры

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

Возвращает


$this|массив

См.

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

repository()source public

repository( Cake\Datasource\RepositoryInterface $table = null )

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

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

Параметры

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

Возвращает

$this|Cake\Datasource\QueryTrait
$this

setResult()source public

setResult( Cake\Datasource\ResultSetInterface $results )

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

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

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

Параметры

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

Возвращает


$this

toArray()source public

toArray( )

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

Возвращает

массив

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

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

defaultTypes( array $types = null )

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

Устаревшее

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

Параметры

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

Возвращает


$this|массив

getDefaultTypes()source public

getDefaultTypes( )

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

Возвращает

массив

getTypeMap()source public

getTypeMap( )

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

Возвращает

Cake\Database\TypeMap

setDefaultTypes()source public

setDefaultTypes( array $types )

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

Параметры

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

Возвращает


$this

setTypeMap()source public

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

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

Параметры

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

Возвращает


$this

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

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

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

Устаревшее

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

Параметры

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

Возвращает


$this|\Cake\Database\TypeMap

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

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
END_OF_DOCUMENT_MARKER

toArray()source public

toArray( )

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

Возвращает

array

Реализация

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.6/class-Cake.ORM.Query.html

Spec-Zone.ru

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