Интерфейс QueryInterface
Основа каждого объекта запроса
Прямые реализаторы
Краткое описание констант
-
stringJOIN_TYPE_INNER'INNER' -
stringJOIN_TYPE_LEFT'LEFT' -
stringJOIN_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\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
Исключения
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
Резюме магических методов
© 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