Spec-Zone.ru › CakePHP 4.2

Интерфейс QueryInterface

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

Пространство имён: Cake\Datasource

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

  • 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

    Устанавливает объект Table по умолчанию, который будет использоваться этим запросом и сформирует предложение 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

псевдоним, используемый для префикса поля

Возвращает

array

aliasFields() public

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

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

Параметры

array $fields

Поля для псевдонима

string|null $defaultAlias optional

Псевдоним по умолчанию

Возвращает

string[]

all() public

all(): Cake\Datasource\ResultSetInterface

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

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

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

Возвращает

Cake\Datasource\ResultSetInterface

andWhere() public @method

andWhere(mixed $conditions, array $types = []): $this

Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор AND. {@see \Cake\Database\Query::andWhere()}

Параметры

$conditions
array $types optional

Возвращает

$this

applyOptions() public

applyOptions(array $options): $this

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

  • fields: Сопоставляется с методом select
  • conditions: Сопоставляется с методом where
  • limit: Сопоставляется с методом limit
  • order: Сопоставляется с методом order
  • offset: Сопоставляется с методом offset
  • group: Сопоставляется с методом group
  • having: Сопоставляется с методом having
  • contain: Сопоставляется с параметрами contain для eager loading
  • 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 $options

Список предложений запроса для применения новых частей.

Возвращает

$this

count() public

count(): int

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

Возвращает

int

find() public

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

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

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

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

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

Параметры

string $finder

Метод поиска для использования.

array $options optional

Параметры для поиска.

Возвращает

static

first() public

first(): Cake\Datasource\EntityInterface|array|null

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

Пример:

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

Возвращает

Cake\Datasource\EntityInterface|array|null

firstOrFail() public @method

firstOrFail(): Cake\Datasource\EntityInterface|array

Получить первый результат из выполняемого запроса или выбросить исключение. {@see \Cake\Database\Query::firstOrFail()}

Возвращает

Cake\Datasource\EntityInterface|array

getRepository() public

getRepository(): Cake\Datasource\RepositoryInterface|null

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

Возвращает

Cake\Datasource\RepositoryInterface|null

limit() public

limit(intCake\Database\ExpressionInterface|null $num): $this

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

Примеры

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

Параметры

intCake\Database\ExpressionInterface|null $num

количество записей, которые будут возвращены

Возвращает

$this

offset() public

offset(intCake\Database\ExpressionInterface|null $num): $this

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

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

Примеры

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

Параметры

intCake\Database\ExpressionInterface|null $num

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

Возвращает

$this

order() public

order(arrayCake\Database\ExpressionInterfaceClosure|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().

Параметры

arrayCake\Database\ExpressionInterfaceClosure|string $fields

поля, которые будут добавлены в список

bool $overwrite optional

необходимо ли сбросить порядок со списком полей или нет

Возвращает

$this

page() 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

Объект репозитория по умолчанию для использования

Возвращает

$this

select() public

select(array|string|callableCake\Database\ExpressionInterfaceCake\ORM\TableCake\ORM\Association $fields, bool $overwrite = false): $this

Добавляет поля для выбора из источника данных.

Вызов этой функции несколько раз добавит больше полей в список полей для выбора.

Если true передаётся во втором аргументе, все предыдущие выборки будут перезаписаны списком, переданным в первом аргументе.

Параметры

array|string|callableCake\Database\ExpressionInterfaceCake\ORM\TableCake\ORM\Association $fields

Поля.

bool $overwrite optional

необходимо ли сбросить поля переданным списком или нет

Возвращает

$this

toArray() public

toArray(): array

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

Возвращает

array

where() public

where(string|arrayClosure|null $conditions = null, array $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-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно процитированы. Самое безопасное, что вы можете сделать, это никогда не использовать строковые условия.

Параметры

string|arrayClosure|null $conditions optional

Условия для фильтрации.

array $types optional

ассоциативный массив имён типов, используемых для привязки значений к запросу

bool $overwrite optional

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

Возвращает

$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.2/interface-Cake.Datasource.QueryInterface.html

Spec-Zone.ru

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