Spec-Zone.ru › CakePHP 3.8

Интерфейс QueryInterface

Основа для каждого объекта запроса

Прямые реализаторы

  • Cake\ORM\Query
Пространство имён: Cake\Datasource
Расположение: Datasource/QueryInterface.php

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

  • string

    JOIN_TYPE_INNER
    'INNER'
  • string

    JOIN_TYPE_LEFT
    'LEFT'
  • string

    JOIN_TYPE_RIGHT
    'RIGHT'

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

  • aliasField() public

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

  • aliasFields() public

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

  • all() public
    Получить результаты для этого запроса.
  • applyOptions() public

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

  • count() public
    Возвращает общее количество результатов для запроса.
  • find() public
    Применить пользовательские методы поиска к существующему объекту запроса.
  • first() public

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

  • limit() public

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

  • offset() public

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

  • order() public

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

  • page() public
    Установить страницу результатов, которую вы хотите.
  • repository() public

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

  • toArray() public
    Возвращает массивное представление результатов после выполнения запроса.
  • where() public

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

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

aliasField()source public

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

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

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

Параметры

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

Возвращает

строка

aliasFields()source public

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

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

Параметры

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

Возвращает

массив строк

all()source public

all( )

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

Вернёт либо набор результатов через setResult(), либо выполнит этот запрос и вернёт объект ResultSetDecorator, готовый для потоковой передачи результатов.

ResultSetDecorator — это итерируемый объект, который реализует методы, найденные в Cake\Collection\Collection.

Возвращает

Cake\Datasource\ResultSetInterface

applyOptions()source public

applyOptions( array $options )

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

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

Пример:

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

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

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

Параметры

массив $options
список условий запроса, к которым нужно применить новые части.

Возвращает


$this

count()source public

count( )

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

Возвращает

целое число

find()source public

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

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

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

$repository->find('all')->find('recent');

Вышеприведённый пример демонстрирует накопление нескольких методов поиска в одном запросе.

Параметры

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

Возвращает


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

first()source public

first( )

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

Пример:

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

Возвращает

смешанный тип
первый результат из ResultSet

limit()source public

limit( integer $num )

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

Примеры

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

Параметры

целое число $num
количество записей, которые нужно вернуть

Возвращает


$this
END_OF_DOCUMENT_MARKER ```

offset()source public

offset( integer $num )

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

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

Примеры

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

Параметры

целое число $num
количество записей для пропуска

Возвращает


$this

order()source public

order( array|string $fields , boolean $overwrite = false )

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

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

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

Примеры:

$query->order(['title' => 'DESC', 'author_id' => 'ASC']);

Производит:

ORDER BY title DESC, author_id ASC

$query->order(['title' => 'DESC NULLS FIRST'])->order('author_id');

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

ORDER BY title DESC NULLS FIRST, author_id

$expression = $query->newExpr()->add(['id % 2 = 0']);
$query->order($expression)->order(['title' => 'ASC']);

Превратится в:

ORDER BY (id %2 = 0), title ASC

Если вам нужно задать сложные выражения как условия сортировки, вы должны использовать orderAsc() или orderDesc().

Параметры

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

Возвращает


$this

page()source public

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

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

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

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

Параметры

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

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

Возвращает


$this

Использует

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

repository()source public

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

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

Параметры

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

Возвращает

Cake\Datasource\RepositoryInterface|Cake\Datasource\QueryInterface
$this

toArray()source public

toArray( )

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

Возвращает

массив

where()source public

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавление условий в несколько шагов:

Вы можете использовать вызываемые функции для построения сложных выражений, функции принимают в качестве первого аргумента новый объект 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-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Самое безопасное, что вы можете сделать, это никогда не использовать строковые условия.

Параметры

строка|массив|вызываемая функция|null $conditions необязательно null
Условия для фильтрации.
массив $types необязательно []
ассоциативный массив имен типов, используемых для привязки значений к запросу
булево $overwrite необязательно false
нужно ли сбросить условия со списком, переданным в качестве параметра или нет

Возвращает


$this

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

getRepository()source public

getRepository( )

Возвращает

Cake\Datasource\RepositoryInterface

© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.8/class-Cake.Datasource.QueryInterface.html

Spec-Zone.ru

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