Spec-Zone.ru › CakePHP 3.4

Интерфейс QueryInterface

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

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

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

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

  • 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

offset()source public

offset( integer $num )

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

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

Примеры

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

Параметры

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

Возвращает


$this
END_OF_DOCUMENT_MARKER

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

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

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

Spec-Zone.ru

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