Spec-Zone.ru › CakePHP 3.6

Интерфейс 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.6/class-Cake.Datasource.QueryInterface.html

Spec-Zone.ru

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