Интерфейс QueryInterface
Основа для каждого объекта запроса
Краткое описание методов
-
aliasField() public
Возвращает массив ключ => значение, представляющий одно алиасное поле, которое можно передать непосредственно в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
-
aliasFields() public
Выполняет
aliasField()для каждого поля в предоставленном списке и возвращает результат в одном массиве. -
all() public
Получить результаты этого запроса.
-
andWhere() public @method
Подключает любой ранее определенный набор условий к предоставленному списку с использованием оператора AND. {@see \Cake\Database\Query::andWhere()}
-
applyOptions() public
Заполняет или добавляет части текущих условий запроса, используя массив. Это удобно для передачи всех условий запроса сразу. Массив параметров принимает:
-
count() public
Возвращает общее количество результатов для запроса.
-
find() public
Применить настраиваемые нахождения к существующему объекту запроса.
-
first() public
Возвращает первый результат выполнения этого запроса. Если запрос еще не был выполнен, он установит условие ограничения до 1 для повышения производительности.
-
firstOrFail() public @method
Получить первый результат из выполняемого запроса или вызвать исключение. {@see \Cake\Database\Query::firstOrFail()}
-
getRepository() public
Возвращает объект репозитория по умолчанию, который будет использоваться этим запросом, то есть репозиторий, который будет отображаться в предложении from.
-
limit() public
Устанавливает количество записей, которые должны быть извлечены из базы данных, принимает целое число или объект выражения, который оценивается как целое число. В некоторых базах данных эта операция может не поддерживаться или потребовать преобразования запроса для ограничения размера набора результатов.
-
offset() public
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это часто используется для постраничной обработки больших результатов. Принимает целое число или объект выражения, который оценивается как целое число.
-
order() public
Добавляет одно или несколько полей, которые будут использоваться в предложении ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
-
page() public
Установите страницу результатов, которую вы хотите.
-
repository() public
Установите объект таблицы по умолчанию, который будет использоваться этим запросом и сформирует предложение
FROM. -
select() public
Добавляет поля, которые должны быть выбраны из источника данных.
-
toArray() public
Возвращает массивное представление результатов после выполнения запроса.
-
where() public
Добавляет условие или набор условий, которые должны быть использованы в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нем, значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
Краткое описание методов
aliasField() public
aliasField(string $field, string|null $alias = null): array
Возвращает массив ключ => значение, представляющий одно поле с псевдонимом, которое можно передать напрямую в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
Если поле уже имеет псевдоним, оно не будет изменено. Если не передан $alias, будет использована таблица по умолчанию для этого запроса.
Параметры
-
string$field Поле для псевдонима
-
string|null$alias optional псевдоним, используемый для префикса поля
Возвращает
arrayaliasFields() public
aliasFields(array $fields, string|null $defaultAlias = null): array<string>
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в одном массиве.
Параметры
-
array$fields Поля для псевдонима
-
string|null$defaultAlias optional Псевдоним по умолчанию
Возвращает
array<string>all() public
all(): Cake\Datasource\ResultSetInterface
Получить результаты этого запроса.
Вернет либо набор результатов через setResult(), либо выполнит этот запрос и вернет объект ResultSetDecorator, готовый для потоковой передачи результатов.
ResultSetDecorator — это обозреваемый объект, который реализует методы, найденные в Cake\Collection\Collection.
Возвращает
Cake\Datasource\ResultSetInterfaceandWhere() public @method
andWhere(mixed $conditions, array $types = []): $this
Подключает любой ранее определенный набор условий к предоставленному списку с использованием оператора AND. {@see \Cake\Database\Query::andWhere()}
Параметры
- $conditions
-
array$types optional
Возвращает
$thisapplyOptions() public
applyOptions(array<string, mixed> $options): $this
Заполняет или добавляет части в текущие предложения запроса с использованием массива. Это удобно для одновременной передачи всех предложений запроса. Массив параметров принимает:
- 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<string, mixed>$options список предложений запроса для применения новых частей.
Возвращает
$thiscount() public
count(): int
Возвращает общее количество результатов для запроса.
Возвращает
intfind() public
find(string $finder, array<string, mixed> $options = []): static
Применить пользовательские поиски к существующему объекту запроса.
Позволяет комбинировать пользовательские методы поиска и применять их друг к другу.
$repository->find('all')->find('recent'); Выше приведен пример наложения нескольких методов поиска на один запрос.
Параметры
-
string$finder Метод поиска для использования.
-
array<string, mixed>$options optional Параметры для поиска.
Возвращает
staticfirst() public
first(): Cake\Datasource\EntityInterface|array|null
Возвращает первый результат выполнения этого запроса, если запрос не выполнялся ранее, он установит предложение limit равным 1 по причинам производительности.
Пример:
$singleUser = $query->select(['id', 'username'])->first();
Возвращает
Cake\Datasource\EntityInterface|array|nullfirstOrFail() public @method
firstOrFail(): Cake\Datasource\EntityInterface|array
Получить первый результат из выполняемого запроса или выдать исключение. {@see \Cake\Database\Query::firstOrFail()}
Возвращает
Cake\Datasource\EntityInterface|arraygetRepository() public
getRepository(): Cake\Datasource\RepositoryInterface|null
Возвращает объект репозитория по умолчанию, который будет использоваться этим запросом, то есть репозиторий, который будет отображаться в предложении from.
Возвращает
Cake\Datasource\RepositoryInterface|nulllimit() public
limit(Cake\Database\ExpressionInterface|int|null $limit): $this
Устанавливает количество записей, которые должны быть получены из базы данных, принимает целое число или объект выражения, который вычисляется как целое число. В некоторых базах данных эта операция может не поддерживаться или потребуется преобразование запроса для ограничения размера результирующего набора.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$limit количество записей, которые должны быть возвращены
Возвращает
$thisoffset() public
offset(Cake\Database\ExpressionInterface|int|null $offset): $this
Устанавливает количество записей, которые должны быть пропущены из исходного результирующего набора. Это обычно используется для постраничной разбивки больших результатов. Принимает целое число или объект выражения, который вычисляется как целое число.
В некоторых базах данных эта операция может не поддерживаться или потребуется преобразование запроса для ограничения размера результирующего набора.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$offset количество записей, которые должны быть пропущены
Возвращает
$thisorder() public
order(Cake\Database\ExpressionInterfaceClosure|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей, которые будут использоваться в предложении ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передан массив, ключи будут использоваться как само поле, а значение будет представлять порядок, в котором такое поле должно быть упорядочено. При многократном вызове с одними и теми же полями в качестве ключа последнее определение порядка будет иметь приоритет над другими.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей, которые должны быть выбраны, если только второй аргумент не установлен в true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Производит:
ORDER BY title DESC, author_id ASC
$query
->order(['title' => $query->newExpr('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().
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$fields поля, которые нужно добавить в список
-
bool$overwrite optional нужно ли сбросить порядок со списком полей или нет
Возвращает
$thispage() public
page(int $num, int|null $limit = null): $this
Установите нужную страницу результатов.
Этот метод обеспечивает более простой в использовании интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit будет установлен по умолчанию в существующее предложение limit, а если и оно пусто, то будет использоваться 25.
Нумерация страниц должна начинаться с 1.
Параметры
-
int$num Номер нужной страницы.
-
int|null$limit optional Количество строк, которые вы хотите на странице. Если null, будет использоваться текущее предложение limit.
Возвращает
$thisВызывает исключение
InvalidArgumentExceptionЕсли номер страницы < 1.
repository() public
repository(Cake\Datasource\RepositoryInterface $repository): $this
Установите объект Table по умолчанию, который будет использоваться этим запросом и формировать предложение FROM.
Параметры
-
Cake\Datasource\RepositoryInterface$repository Объект репозитория по умолчанию для использования
Возвращает
$thisselect() public
select(Cake\Database\ExpressionInterfaceCake\ORM\AssociationCake\ORM\Table|callable|array|string $fields, bool $overwrite = false): $this
Добавляет поля для выборки из источника данных.
Вызов этой функции несколько раз добавит больше полей в список полей для выборки.
Если true передаётся во втором аргументе, все предыдущие выборки будут перезаписаны списком, переданным в первом аргументе.
Параметры
-
Cake\Database\ExpressionInterfaceCake\ORM\AssociationCake\ORM\Table|callable|array|string$fields Поля.
-
bool$overwrite опционально нужно ли сбросить поля с переданным списком или нет
Возвращает
$thistoArray() public
toArray(): array
Возвращает массив, представляющий результаты после выполнения запроса.
Возвращает
arraywhere() public
where(Closure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использованы в операторе 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-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Наиболее безопасным вариантом является никогда не использовать строковые условия.
Параметры
-
Closure|array|string|null$conditions опционально Условия для фильтрации.
-
array<string, string>$types опционально Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite опционально нужно ли сбросить условия с переданным списком или нет
Возвращает
$this
© 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/4.3/interface-Cake.Datasource.QueryInterface.html