Интерфейс QueryInterface
Основа каждого объекта запроса
Прямые реализаторы
Краткое описание констант
-
string'INNER' -
string'LEFT' -
string'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\ResultSetInterfaceapplyOptions()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
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–2018 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.5/class-Cake.Datasource.QueryInterface.html