Класс Query
Расширяет базовый класс Query, добавляя новые методы, связанные с загрузкой ассоциаций, автоматическим выбором полей, автоматическим преобразованием типов и обертыванием результатов в специфический итератор, который будет отвечать за гидратацию результатов при необходимости.
См.: \Cake\Collection\CollectionInterface Для полного описания методов коллекции, поддерживаемых этим классом
Константы
-
intAPPEND0
Указывает, что операция должна добавить элемент в конец списка
-
stringJOIN_TYPE_INNER'INNER'
-
stringJOIN_TYPE_LEFT'LEFT'
-
stringJOIN_TYPE_RIGHT'RIGHT'
-
boolOVERWRITEtrue
Указывает, что операция должна заменить список
-
intPREPEND1
Указывает, что операция должна добавить элемент в начало списка
Краткое описание свойств
- $_autoFields protected
bool|nullОтслеживает, должно ли исходное запросы включать поля из таблицы верхнего уровня.
- $_beforeFindFired protected
boolИстина, если событие beforeFind уже было активировано для этого запроса
- $_cache protected
Cake\Datasource\QueryCacher|nullЭкземпляр кэшера запросов, если для этого запроса включён кэширование.
- $_connection protected
Cake\Database\ConnectionЭкземпляр соединения, используемый для выполнения этого запроса.
- $_counter protected
callable|nullВыполняемая функция, которая может быть использована для вычисления общего количества записей, которые будет соответствовать этому запросу, когда не используется
limit - $_deleteParts protected deprecated
array<string>Список положений запроса для обхода при генерации оператора DELETE.
- $_dirty protected
boolУказывает, была ли изменена внутренняя структура этого запроса. Это используется для отбрасывания кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненную инструкцию.
- $_eagerLoaded protected
boolЯвляется ли запрос автономным или результатом операции жадного загрузки.
- $_eagerLoader protected
Cake\ORM\EagerLoader|nullЭкземпляр класса, отвечающего за хранение содержаний ассоциаций и за жадную загрузку их при выполнении этого запроса.
- $_formatters protected
array<callable>Список классов форматировщиков или обратных вызовов, которые будут после обработки результатов при извлечении.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullЭкземпляр объекта билдера функций, используемого для генерации произвольных SQL-функций.
- $_hasFields protected
bool|nullУказывает, выбрал ли пользователь какие-либо поля перед выполнением. Это используется для определения, должны ли быть выбраны какие-либо поля автоматически.
- $_hydrate protected
boolСледует ли гидратировать результаты в объекты сущностей.
- $_insertParts protected deprecated
array<string>Список положений запроса для обхода при генерации оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_mapReduce protected
arrayСписок процедур map-reduce, которые должны быть применены к результату запроса.
- $_options protected
arrayСодержит все настраиваемые параметры, переданные с помощью applyOptions, которые не могли быть обработаны ни одним методом в этом классе.
- $_parts protected
array<string, mixed>Список SQL-частей, которые будут использованы для построения этого запроса.
- $_repository public @property
Cake\ORM\TableЭкземпляр объекта таблицы, к которой привязан этот запрос.
- $_resultDecorators protected
array<callable>Список функций обратного вызова, которые должны быть вызваны для изменения каждой строки из результирующего оператора при извлечении. Каждая из функций обратного вызова получит массив строк в качестве первого аргумента.
- $_results protected
iterable|nullРезультат набора.
- $_resultsCount protected
int|nullЗначение COUNT(*) для запроса.
- $_selectParts protected deprecated
array<string>Список положений запроса для обхода при генерации оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в предложении select.
- $_type protected
stringТип этого запроса (select, insert, update, delete).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected deprecated
array<string>Список положений запроса для обхода при генерации оператора UPDATE.
- $_useBufferedResults protected
boolБулево значение для отслеживания включения буферизованных результатов.
- $_valueBinder protected
Cake\Database\ValueBinder|nullОбъект, отвечающий за генерацию заполнитель запросов и временное хранение значений, связанных с каждым из них.
- $aliasingEnabled protected
boolВключены ли псевдонимы для полей.
- $typeCastEnabled protected
boolФлаг отслеживания для отключения приведения типов.
Краткое описание методов
-
__call() public
Разрешает вызывать методы из набора результатов, как если бы они были из этого класса
-
__clone() public
Обрабатывает очистку итератора и клонирование всех выражений и привязок значений.
-
__construct() public
Конструктор
-
__debugInfo() public
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
-
__toString() public
Возвращает строковое представление этого запроса (полное SQL-выражение).
-
_addAssociationsToTypeMap() protected
Используется для рекурсивного добавления типов столбцов содержащих ассоциации в запрос.
-
_addDefaultFields() protected
Проверяет, есть ли заданные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
-
_addDefaultSelectTypes() protected
Устанавливает типы по умолчанию для преобразования полей в разделе select.
-
_conjugate() protected
Вспомогательная функция, используемая для построения условий путем комбинирования объектов QueryExpression.
-
_decorateResults() protected
Декорирует итератор результатов с помощью MapReduce-процедур и форматирователей.
-
_decorateStatement() protected
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.
-
_decoratorClass() protected
Возвращает имя класса, используемого для декорирования результатов.
-
_dirty() protected
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэширования в памяти, например, предыдущие результаты.
-
_execute() protected
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для леничной загрузки глубоких ассоциаций.
-
_expressionsVisitor() protected
Метод обхода частей запроса, используемый методом traverseExpressions().
-
_makeJoin() protected
Возвращает массив, который можно передать методу join, описывающий одну условную часть.
-
_performCount() protected
Выполняет и возвращает COUNT(*) для запроса.
-
_transformQuery() protected
Применяет некоторые настройки к объекту запроса перед его выполнением.
-
addDefaultTypes() public
Подсказывает этому объекту сопоставить правильные типы при преобразовании условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователя при указании условий.
-
aliasField() public
Возвращает массив ключ => значение, представляющий одно алиасовое поле, которое можно напрямую передать методу select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
-
aliasFields() public
Выполняет
aliasField()для каждого поля в предоставленном списке и возвращает результат в одном массиве. -
all() public
Получение результатов для этого запроса.
-
andHaving() public
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в предложении HAVING. Этот метод работает точно так же, как метод
andWhere(). Обратитесь к его документации для получения информации о том, как использовать каждый параметр. -
andWhere() public @method
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND. {@see \Cake\Database\Query::andWhere()}
-
append() public @method
Добавляет дополнительные строки к результату запроса.
-
applyOptions() public
Заполняет или добавляет части к текущим предложениям запроса с использованием массива. Это удобно для передачи всех предложений запроса сразу.
-
bind() public
Связывает заполнитель запроса со значением и типом.
-
cache() public
Включить кеширование результатов для этого запроса.
-
chunk() public @method
Группирует результаты в массивы по $size строк каждый.
-
clause() public
Возвращает данные, хранящиеся в указанном предложении. Это полезно для изменения любой внутренней части запроса, и SQL-диалекты используют его для преобразования запроса перед выполнением. Доступные предложения: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
-
cleanCopy() public
Создает копию текущего запроса, вызывает beforeFind и сбрасывает некоторые состояния.
-
clearContain() public
Очищает содержащие ассоциации из текущего запроса.
-
clearResult() public
Очищает внутренний кэш результатов и значение внутреннего подсчета из текущего объекта запроса.
-
combine() public @method
Возвращает значения столбца $v, индексированные по столбцу $k, и сгруппированные по $g.
-
contain() public
Устанавливает список ассоциаций, которые должны быть загружены вместе с этим запросом. Список связанных таблиц должен быть ранее задан как ассоциации с использованием API таблиц.
-
count() public
Возвращает общее количество результатов для запроса.
-
countBy() public @method
Возвращает количество уникальных значений для столбца.
-
counter() public
Регистрирует вызываемую функцию, которая будет выполняться при вызове метода
countв этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение методаcount. -
decorateResults() public
Регистрирует обратный вызов, который будет выполняться для каждого результата, извлекаемого из набора результатов. Функция обратного вызова в качестве первого параметра получит массив с исходными данными из базы данных для каждой извлеченной строки и должна вернуть строку с любыми возможными изменениями.
-
delete() public
Создать запрос на удаление.
-
disableAutoFields() public
Отключает автоматическое добавление полей.
-
disableBufferedResults() public
Отключает буферизацию результатов.
-
disableHydration() public
Отключить гидрацию сущностей.
-
disableResultsCasting() public
Отключает преобразование результатов.
-
distinct() public
Добавляет
DISTINCTусловие в запрос для удаления дубликатов из набора результатов. Это условие может быть использовано только для запросов SELECT. -
each() public @method
Передает каждый результат запроса в вызываемую функцию.
-
eagerLoaded() public
Устанавливает объект запроса как объект с жадной загрузкой. Если аргумент не передан, возвращается текущее значение настроенного запроса
_eagerLoaded. -
enableAutoFields() public
Устанавливает, следует ли ORM автоматически добавлять поля.
-
enableBufferedResults() public
Включает/выключает буферизацию результатов.
-
enableHydration() public
Включить/выключить гидрацию сущностей.
-
enableResultsCasting() public
Включает преобразование результатов.
-
epilog() public
Строка или выражение, которое будет добавлен к сгенерированному запросу.
-
every() public @method
Возвращает true, если все результаты проходят проверку вызываемой функции.
-
execute() public
Компилирует SQL-представление этого запроса и выполняет его с использованием настроенного объекта соединения. Возвращает объект результирующего оператора.
-
expr() public
Возвращает новый объект QueryExpression. Эта функция полезна при создании сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
-
extract() public @method
Извлекает один столбец из каждой строки.
-
filter() public @method
Удерживает результаты, проходящие проверку вызываемой функции.
-
find() public
Применяет пользовательские поиск к существующему объекту запроса.
-
first() public
Возвращает первый результат выполнения этого запроса. Если запрос еще не был выполнен, он установит ограничение до 1 для повышения производительности.
-
firstOrFail() public
Получить первый результат из выполняемого запроса или вызвать исключение.
-
formatResults() public
Регистрирует новую функцию-обработчик форматирования, которая должна выполняться при попытке извлечь результаты из базы данных.
-
from() public
Добавляет одну или несколько таблиц, которые будут использоваться в части FROM этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
-
func() public
Возвращает экземпляр объекта-строителя функций, который может использоваться для генерации произвольных SQL-функций.
-
getConnection() public
Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
-
getContain() public
-
getDefaultTypes() public
Получает типы по умолчанию текущей карты типов.
-
getEagerLoader() public
Возвращает текущий настроенный экземпляр.
-
getIterator() public
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без ручного вызова execute(), что делает его похожим на набор результатов, а не на сам запрос.
-
getMapReducers() public
Возвращает список ранее зарегистрированных процедур map reduce.
-
getOptions() public
Возвращает массив с настроенными опциями, которые были применены к этому запросу и которые еще не были обработаны другим методом в этом классе.
-
getRepository() public @method
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в части from.
-
getResultFormatters() public
Возвращает список ранее зарегистрированных процедур форматирования.
-
getSelectTypeMap() public
Возвращает класс TypeMap, где хранятся типы для каждого поля в части select.
-
getTypeMap() public
Возвращает существующую карту типов.
-
getValueBinder() public
Возвращает используемый экземпляр ValueBinder.
-
group() public
Добавляет одно или несколько полей, которые будут использоваться в части GROUP BY этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
-
groupBy() public @method
Группирует все результаты в памяти по значению столбца.
-
having() public
Добавляет условие или набор условий, которые будут использоваться в части
HAVINGэтого запроса. Этот метод работает точно так же, как методwhere(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр. -
identifier() public
Создает выражение, которое ссылается на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
-
indexBy() public @method
Возвращает результаты, индексированные по значению столбца.
-
innerJoin() public
Добавляет одно
INNER JOINусловие в запрос.
-
innerJoinWith() public
Создаёт INNER JOIN с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и пользовательские условия, которые были изначально установлены для неё.
-
insert() public
Создаёт запрос на вставку.
-
into() public
Устанавливает имя таблицы для запросов на вставку.
-
isAutoFieldsEnabled() public
Получает, следует ли ORM автоматически добавлять поля.
-
isBufferedResultsEnabled() public
Возвращает, включены/выключены буферизованные результаты.
-
isEagerLoaded() public
Возвращает текущее значение настроенного запроса
_eagerLoaded -
isEmpty() public @method
Возвращает true, если этот запрос не нашёл результатов.
-
isHydrationEnabled() public
Возвращает текущий режим гидратации.
-
isResultsCastingEnabled() public
Возвращает, включено/выключено преобразование результатов.
-
join() public
Добавляет одну или несколько таблиц, которые будут использоваться в качестве условий JOIN к этому запросу. Таблицы могут быть переданы в виде массива строк, массива, описывающего части объединения, массива с несколькими описаниями объединения или одной строкой.
-
jsonSerialize() public
Выполняет запрос и преобразует результат в JSON.
-
last() public @method
Возвращает последнюю строку результата запроса
-
leftJoin() public
Добавляет одно
LEFT JOINусловие к запросу. -
leftJoinWith() public
Создаёт LEFT JOIN с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и пользовательские условия, которые были изначально установлены для неё.
-
limit() public
Устанавливает количество записей, которое должно быть получено из базы данных, принимает целое число или объект выражения, который вычисляется в целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
-
map() public @method
Изменяет каждый из результатов с помощью вызываемого объекта.
-
mapReduce() public
Регистрирует новую процедуру MapReduce, которая будет выполняться поверх результатов базы данных. И вызываемый объект-маппер, и вызываемый объект-редуктор должны быть вызываемыми объектами.
-
matching() public
Добавляет условия фильтрации к этому запросу, чтобы отображались только строки, имеющие отношение к другой строке из связанной таблицы, на основе условий в связанной таблице.
-
max() public @method
Возвращает максимальное значение для одного столбца во всех результатах.
-
min() public @method
Возвращает минимальное значение для одного столбца во всех результатах.
-
modifier() public
Добавляет одно или несколько
SELECTмодификаторов, которые будут использоваться вSELECT. -
nest() public @method
Создаёт древовидную структуру, вкладывая значения столбца $p в значения столбца с тем же значением для $k, используя $n в качестве ключа вложенности.
-
newExpr() public
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с помощью интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать специализированный класс QueryExpression, если это необходимо.
-
notMatching() public
Добавляет условия фильтрации к этому запросу, чтобы отображались только строки, не имеющие соответствия в другой связанной таблице на основе условий в связанной таблице.
-
offset() public
Устанавливает количество записей, которые следует пропустить из исходного набора результатов. Часто используется для пагинации больших результатов. Принимает целое число или объект выражения, который вычисляется в целое число.
-
order() public
Добавляет один или несколько полей, которые будут использоваться в предложении ORDER для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки.
-
orderAsc() public
Добавляет предложение ORDER BY со значением ASC.
-
orderDesc() public
Добавляет предложение ORDER BY со значением DESC.
-
page() public
Установите страницу результатов, которую вы хотите получить.
-
reduce() public @method
Складывает все результаты в одно значение с помощью вызываемого объекта.
-
reject() public @method
Удаляет результаты, проходящие тест вызываемого объекта.
-
removeJoin() public
Удаляет объединение, если оно было определено.
-
repository() public
Установите объект таблицы по умолчанию, который будет использоваться этим запросом и сформирует предложение
FROM. -
rightJoin() public
Добавляет одно
RIGHT JOINусловие к запросу. -
rowCountAndClose() public
Выполняет SQL этого запроса и немедленно закрывает оператор перед возвращением количества строк, изменённых в результате.
-
sample() public @method
Случайным образом перемешивает результаты в памяти и возвращает подмножество из них.
-
select() public
Добавляет новые поля, которые должны возвращаться оператором
SELECTпри выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражения, одного объекта выражения или одной строки. -
selectAllExcept() public
Все поля, связанные с переданной таблицей, за исключением исключённых полей, будут добавлены к предложению SELECT запроса. Переданные исключённые поля не должны быть алиасами. После первого вызова этого метода второй вызов не может быть использован для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте в качестве параметра булевое значение overwrite со значением true, что сбросит предложение SELECT, удалив все предыдущие добавления.
-
set() public
Установите одно или несколько полей для обновления.
-
setConnection() public
Устанавливает экземпляр подключения, используемый для выполнения и преобразования этого запроса.
-
setDefaultTypes() public
Переопределяет сопоставления типов по умолчанию для полей в объекте-реализации.
-
setEagerLoader() public
Устанавливает экземпляр класса eager loader, используемого для загрузки ассоциаций и хранения содержаний.
-
setResult() public
Устанавливает результат набора для запроса.
-
setSelectTypeMap() public
Устанавливает класс TypeMap, в котором хранятся типы для каждого поля в выборке.
-
setTypeMap() public
Создаёт новый TypeMap, если $typeMap является массивом, в противном случае меняет его на указанный.
-
setValueBinder() public
Переопределяет текущий связующий объект значений.
-
shuffle() public @method
Случайным образом меняет порядок возвращаемых результатов в памяти.
-
skip() public @method
Пропускает указанное количество строк с начала результата запроса.
-
some() public @method
Возвращает true, если хотя бы один из результатов проходит проверку с помощью переданной функции.
-
sortBy() public @method
Сортирует результаты запроса с помощью обратного вызова.
-
sql() public
Возвращает SQL-представление этого объекта.
-
stopWhen() public @method
Возвращает каждую строку до тех пор, пока переданная функция не вернёт true.
-
subquery() public static
Возвращает новый запрос с отключённым автоматическим алиасированием полей.
-
sumOf() public @method
Возвращает сумму всех значений для одного столбца.
-
take() public @method
Ограничивает и смещает результаты запроса в памяти.
-
toArray() public @method
Возвращает массив ключ-значение с результатами этого запроса.
-
toList() public @method
Возвращает числовой индексированный массив с результатами этого запроса.
-
traverse() public
Итерируется по каждой указанной части. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция часто используется для обхода всех частей запроса, которые будут использованы для построения запроса.
-
traverseExpressions() public
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход всего дерева выражений. Это выполнит переданную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося в этом запросе на любой глубине вложенности в любой части запроса.
-
traverseParts() public
Итерируется по предоставленным частям.
-
triggerBeforeFind() public
Вызывает событие beforeFind для объекта репозитория запроса.
-
type() public
Возвращает тип этого запроса (select, insert, update, delete).
-
union() public
Добавляет полный запрос, который будет использоваться вместе с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов переданного запроса. Вы можете добавлять любое количество запросов, вызывая этот метод несколько раз с разными запросами.
-
unionAll() public
Добавляет полный запрос, который будет использоваться вместе с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов переданного запроса. Вы можете добавлять любое количество запросов, вызывая этот метод несколько раз с разными запросами.
-
update() public
Создаёт запрос на обновление.
-
values() public
Устанавливает значения для запроса вставки.
-
where() public
Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нём, значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
-
whereInList() public
Добавляет условие IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
-
whereNotInList() public
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
-
whereNotInListOrNull() public
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Это также позволяет полю быть null с условием IS NULL, так как значение null приведет к тому, что условие NOT IN всегда будет ложным.
-
whereNotNull() public
Удобный метод, который добавляет условие NOT NULL в запрос.
-
whereNull() public
Удобный метод, который добавляет условие IS NULL в запрос.
-
window() public
Добавляет именованное окно выражения.
-
with() public
Добавляет новое общее табличное выражение (CTE) в запрос.
-
zip() public @method
Возвращает первый результат и из запроса и $c в массиве, затем второй результат и так далее.
-
zipWith() public @method
Возвращает каждый результат вызова $c с первыми строками запроса и каждого элемента, затем вторые строки и так далее.
Подробное описание методов
__call() public
__call(string $method, array $arguments): mixed
Позволяет вызывать методы из результирующего набора, как если бы они были из этого класса
Параметры
-
string$method метод для вызова
-
array$arguments список аргументов для вызываемого метода
Возвращает
mixedИсключения
BadMethodCallExceptionесли метод вызывается для не-SELECT запроса
__clone() public
__clone(): void
Обрабатывает очистку итератора и клонирование всех выражений и привязок значений.
Обрабатывает клонирование eager loaders.
Возвращает
void__construct() public
__construct(Cake\Database\Connection $connection, Cake\ORM\Table $table)
Конструктор
Параметры
-
Cake\Database\Connection$connection Объект соединения
-
Cake\ORM\Table$table Таблица, с которой начинается этот запрос
__debugInfo() public
__debugInfo(): array<string, mixed>
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
Возвращает
array<string, mixed>__toString() public
__toString(): string
Возвращает строковое представление этого запроса (полное SQL-выражение).
Возвращает
string_addAssociationsToTypeMap() protected
_addAssociationsToTypeMap(Cake\ORM\Table $table, Cake\Database\TypeMap $typeMap, array<string, array> $associations): void
Используется для рекурсивного добавления типов столбцов связанных ассоциаций в запрос.
Параметры
-
Cake\ORM\Table$table Экземпляр таблицы для извлечения ассоциаций.
-
Cake\Database\TypeMap$typeMap Карта типов для проверки столбцов. Эта карта типов неявно изменяется через {@link \Cake\ORM\Query::addDefaultTypes()}
-
array<string, array>$associations Вложенное дерево ассоциаций для обхода.
Возвращает
void_addDefaultFields() protected
_addDefaultFields(): void
Проверяет наличие заданных полей для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
Возвращает
void_addDefaultSelectTypes() protected
_addDefaultSelectTypes(): void
Устанавливает типы по умолчанию для преобразования полей в предложении SELECT
Возвращает
void_conjugate() protected
_conjugate(string $part, Cake\Database\ExpressionInterfaceClosure|array|string|null $append, string $conjunction, array<string, string> $types): void
Вспомогательная функция, используемая для построения условий путем объединения объектов QueryExpression.
Параметры
-
string$part Имя части запроса, к которой нужно добавить новую часть
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$append Выражение или функция построения для добавления.
-
string$conjunction тип конъюнкции, которая будет использоваться для обработки части
-
array<string, string>$types Ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
void_decorateResults() protected
_decorateResults(Traversable $result): Cake\Datasource\ResultSetInterface
Декорирует итератор результатов с помощью подпрограмм MapReduce и форматировщиков
Параметры
-
Traversable$result Оригинальные результаты
Возвращает
Cake\Datasource\ResultSetInterface_decorateStatement() protected
_decorateStatement(Cake\Database\StatementInterface $statement): Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface
Вспомогательная функция, используемая для обертывания исходного оператора драйвера любыми зарегистрированными обратными вызовами.
Параметры
-
Cake\Database\StatementInterface$statement для декорирования
Возвращает
Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface_decoratorClass() protected
_decoratorClass(): string
Возвращает имя класса, который будет использоваться для декорирования результатов
Возвращает
string_dirty() protected
_dirty(): void
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэша в памяти, такую как предыдущие результаты
Возвращает
void_execute() protected
_execute(): Cake\Datasource\ResultSetInterface
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для загрузки связанных данных.
Возвращает
Cake\Datasource\ResultSetInterface_expressionsVisitor() protected
_expressionsVisitor(Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface> $expression, Closure $callback): void
Метод обхода частей запроса, используемый traverseExpressions()
Параметры
-
Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface>$expression Выражение запроса или массив выражений.
-
Closure$callback Обратный вызов, который будет выполнен для каждого ExpressionInterface, найденного в этом запросе.
Возвращает
void_makeJoin() protected
_makeJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions, string $type): array
Возвращает массив, который может быть передан в метод join, описывающий одно предложение join
Параметры
-
array<string, mixed>|string$table Таблица для соединения
-
Cake\Database\ExpressionInterface|array|string$conditions Условия для соединения.
-
string$type тип соединения для использования
Возвращает
array_performCount() protected
_performCount(): int
Выполняет и возвращает COUNT(*) для запроса.
Возвращает
int_transformQuery() protected
_transformQuery(): void
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет соединения, необходимые для загрузки связанных данных, определенных с помощью contain
Он также устанавливает типы по умолчанию для столбцов в предложении select
Возвращает
voidСм. также
addDefaultTypes() public
addDefaultTypes(Cake\ORM\Table $table): $this
Подсказывает этому объекту связать правильные типы при приведении типов условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает необходимость для пользователя повторять себя при указании условий.
Этот метод возвращает тот же объект запроса для цепочки вызовов.
Параметры
-
Cake\ORM\Table$table Таблица для извлечения типов
Возвращает
$thisaliasField() public
aliasField(string $field, string|null $alias = null): array<string, string>
Возвращает массив ключ => значение, представляющий одно поле с псевдонимом, которое может быть передано напрямую в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
Если поле уже имеет псевдоним, оно не будет изменено. Если $alias не передан, будет использоваться таблица по умолчанию для этого запроса.
Параметры
-
string$field Поле для псевдонима
-
string|null$alias optional псевдоним, используемый для префикса поля
Возвращает
array<string, string>aliasFields() public
aliasFields(array $fields, string|null $defaultAlias = null): array<string, string>
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в виде одного массива.
Параметры
-
array$fields Поля для алиасирования
-
string|null$defaultAlias необязательно По умолчанию алиас
Возвращает
array<string, string>all() public
all(): Cake\Datasource\ResultSetInterface
Получить результаты для данного запроса.
Вернет либо набор результатов, заданных с помощью setResult(), либо выполнит этот запрос и вернёт объект ResultSetDecorator, готовый для потоковой передачи результатов.
ResultSetDecorator — это итерируемый объект, реализующий методы, найденные в Cake\Collection\Collection.
Возвращает
Cake\Datasource\ResultSetInterfaceИсключения
RuntimeExceptionесли этот метод вызывается для запроса, не являющегося запросом на выборку.
andHaving() public
andHaving(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): $this
Подключает любые ранее определенные условия к предоставленному списку, используя оператор AND в части HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к документации для получения информации о том, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, введёнными пользователем, так как они не проверяются на безопасность в конструкторе запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions Условия AND для HAVING.
-
array<string, string>$types необязательно Ассоциативный массив имён типов, используемых для связывания значений с запросом
Возвращает
$thisСм. также
andWhere() public @method
andWhere(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array $types = []): $this
Подключает любые ранее определенные условия к предоставленному списку, используя оператор AND. {@see \Cake\Database\Query::andWhere()}
Важно отметить, что при вызове этой функции любое ранее заданное множество условий для этого запроса будет рассматриваться как один аргумент для оператора AND. Эта функция будет обрабатывать не только последнее определённое условие, но все условия в целом.
При использовании массива для определения условий, создание ограничений для каждой записи массива будет использовать ту же логику, что и функция where(). Это означает, что каждая запись массива будет объединена с другой записью с помощью оператора AND, если вы не вложите условия в массив, используя другие операторы.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Даст:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Создаст:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->or(['author_id' => 1])
->add(['author_id' => 2]);
}); Создаёт следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions -
array$types необязательно
Возвращает
$thisappend() public @method
append(arrayTraversable $items): Cake\Collection\CollectionInterface
Добавляет дополнительные строки к результатам запроса.
Параметры
-
arrayTraversable$items
Возвращает
Cake\Collection\CollectionInterfaceapplyOptions() 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
Все остальные параметры не повлияют на запрос, но будут сохранены как пользовательские параметры, доступные через getOptions(). Кроме того, они автоматически передаются в Model.beforeFind.
Пример:
$query->applyOptions([
'fields' => ['id', 'name'],
'conditions' => [
'created >=' => '2013-01-01'
],
'limit' => 10,
]); Эквивалентно:
$query ->select(['id', 'name']) ->where(['created >=' => '2013-01-01']) ->limit(10)
Пользовательские параметры можно получить через getOptions():
$query->applyOptions([ 'fields' => ['id', 'name'], 'custom' => 'value', ]);
Здесь $options будет содержать ['custom' => 'value'] (параметр fields будет применён к запросу вместо хранения, так как это параметр, относящийся к части запроса):
$options = $query->getOptions();
Параметры
-
array<string, mixed>$options Параметры для применения
Возвращает
$thisСм. также
bind() public
bind(string|int $param, mixed $value, string|int|null $type = null): $this
Связывает заполнитель запроса со значением и типом.
$query->bind(':id', 1, 'integer'); Параметры
-
string|int$param заполнитель, который будет заменён на цитированную версию $value
-
mixed$value Значение для связывания
-
string|int|null$type необязательно имя связанного типа, используемое для приведения типов при отправке в базу данных
Возвращает
$thiscache() public
cache(Closure|string|false $key, Psr\SimpleCache\CacheInterface|string $config = 'default'): $this
Включить кэширование результатов для этого запроса.
Если кэширование запроса включено, при его выполнении будет выполнено следующее:
- Проверить кэш на предмет $key. Если результаты есть, SQL не будет выполняться. Вместо этого будут возвращены кэшированные результаты.
- Когда кэшированные данные устарели/отсутствуют, набор результатов будет кэширован по мере выполнения запроса.
Использование
// Simple string key + config
$query->cache('my_key', 'db_results');
// Function to generate key.
$query->cache(function ($q) {
$key = serialize($q->clause('select'));
$key .= serialize($q->clause('where'));
return md5($key);
});
// Using a pre-built cache engine.
$query->cache('my_key', $engine);
// Disable caching
$query->cache(false); Параметры
-
Closure|string|false$key Ключ кэша или функция для генерации ключа кэша. При использовании функции этот экземпляр запроса будет передан в качестве аргумента.
-
Psr\SimpleCache\CacheInterface|string$config необязательно Имя используемой конфигурации кэша или экземпляр конфигурации кэша.
Возвращает
$thisИсключения
RuntimeExceptionПри попытке кэширования запроса, не являющегося запросом на выборку.
chunk() public @method
chunk(int $size): Cake\Collection\CollectionInterface
Группирует результаты в массивы по $size строк каждый.
Параметры
-
int$size
Возвращает
Cake\Collection\CollectionInterfaceclause() public
clause(string $name): mixed
Возвращает любые данные, которые были сохранены в указанной части. Это полезно для изменения любой внутренней части запроса, и оно используется диалектами SQL для преобразования запроса соответствующим образом перед выполнением. Допустимыми частями, которые можно получить, являются: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
Возвращаемое значение для каждой из этих частей может различаться. Некоторые части используют QueryExpression для хранения своего состояния, некоторые используют массивы, а другие могут использовать булевы значения или целые числа. Это краткое описание типов возвращаемых значений для каждой части.
- update: строка Имя таблицы для обновления
- set: QueryExpression
- insert: массив, вернёт массив, содержащий таблицу + столбцы.
- values: ValuesExpression
- select: массив, вернёт пустой массив, если нет полей
- distinct: булево значение
- from: массив таблиц
- join: массив
- set: массив
- where: QueryExpression, вернёт null, если не задано
- group: массив
- having: QueryExpression, вернёт null, если не задано
- order: OrderByExpression, вернёт null, если не задано
- limit: целое число или QueryExpression, null, если не задано
- offset: целое число или QueryExpression, null, если не задано
- union: массив
Параметры
-
string$name Имя части, которая должна быть возвращена
Возвращает
mixedИсключения
InvalidArgumentExceptionПри отсутствии части с указанным именем.
cleanCopy() public
cleanCopy(): static
Создаёт копию текущего запроса, вызывает beforeFind и сбрасывает некоторые состояния.
Будут очищены следующие состояния:
- autoFields
- limit
- offset
- функции map/reduce
- форматировщики результатов
- order
- содержания
Этот метод создаёт клоны запросов, которые полезны при работе с подзапросами.
Возвращает
staticclearContain() public
clearContain(): $this
Очищает сохранённые ассоциации из текущего запроса.
Возвращает
$thisclearResult() public
clearResult(): $this
Очищает внутренний кэш результатов и внутреннее значение счётчика текущего объекта запроса.
Возвращает
$thiscombine() public @method
combine(mixed $k, mixed $v, mixed $g = null): Cake\Collection\CollectionInterface
Возвращает значения столбца $v по индексу столбца $k, сгруппированные по $g.
Параметры
- $k
- $v
- $g optional
Возвращает
Cake\Collection\CollectionInterfacecontain() public
contain(array|string $associations, callable|bool $override = false): $this
Устанавливает список ассоциаций, которые должны быть загружены вместе с этим запросом. Список ассоциированных таблиц должен быть предварительно задан как ассоциации с использованием API таблиц.
Пример:
// Bring articles' author information
$query->contain('Author');
// Also bring the category and tags associated to each article
$query->contain(['Category', 'Tag']); Ассоциации могут быть произвольно вложены с помощью нотации точек или вложенных массивов, это позволяет этому объекту вычислять соединения или любые дополнительные запросы, которые должны быть выполнены для получения необходимых данных ассоциаций.
Пример:
// Eager load the product info, and for each product load other 2 associations
$query->contain(['Product' => ['Manufacturer', 'Distributor']);
// Which is equivalent to calling
$query->contain(['Products.Manufactures', 'Products.Distributors']);
// For an author query, load his region, state and country
$query->contain('Regions.States.Countries'); Можно управлять условиями и полями, выбранными для каждой из содержащихся ассоциаций:
Пример:
$query->contain(['Tags' => function ($q) {
return $q->where(['Tags.is_popular' => true]);
}]);
$query->contain(['Products.Manufactures' => function ($q) {
return $q->select(['name'])->where(['Manufactures.active' => true]);
}]); Каждая ассоциация может определять специальные параметры при ленивой загрузке. Допустимые параметры, которые можно задать для каждой ассоциации:
-
foreignKey: Используется для установки другого поля для сопоставления обеих таблиц. Если установлено в false, не будут автоматически генерироваться условия соединения.falseможет использоваться только для присоединяемых ассоциаций и не может использоваться с ассоциациями hasMany или belongsToMany. -
fields: Массив с полями, которые должны быть извлечены из ассоциации. -
finder: Искатель для использования при загрузке связанных записей. Либо имя искателя как строка, либо массив для определения параметров для передачи искателю. -
queryBuilder: Эквивалентно передаче вызова вместо массива параметров.
Пример:
// Set options for the hasMany articles that will be eagerly loaded for an author
$query->contain([
'Articles' => [
'fields' => ['title', 'author_id']
]
]); Искатели могут быть настроены для использования параметров.
// Retrieve translations for the articles, but only those for the `en` and `es` locales
$query->contain([
'Articles' => [
'finder' => [
'translations' => [
'locales' => ['en', 'es']
]
]
]
]); При содержании ассоциаций важно включать столбцы внешних ключей. Отсутствие этого приведёт к исключениям.
// Use a query builder to add conditions to the containment
$query->contain('Authors', function ($q) {
return $q->where(...); // add conditions
});
// Use special join conditions for multiple containments in the same method call
$query->contain([
'Authors' => [
'foreignKey' => false,
'queryBuilder' => function ($q) {
return $q->where(...); // Add full filtering conditions
}
],
'Tags' => function ($q) {
return $q->where(...); // add conditions
}
]); Если вызвано с пустым первым аргументом и $override установлено в true, предыдущий список будет очищен.
Параметры
-
array|string$associations Список псевдонимов таблиц для запроса.
-
callable|bool$override optional Билдер запроса для ассоциации, или если ассоциации — массив, булево значение, указывающее, следует ли переопределять предыдущий список переданным списком. По умолчанию предыдущий список объединяется с новым.
Возвращает
$thiscount() public
count(): int
Возвращает общее количество результатов для запроса.
Возвращает COUNT(*) для запроса. Если запрос не был изменён и подсчёт уже был выполнен, возвращается кэшированное значение.
Возвращает
intcountBy() public @method
countBy(callable|string $field): Cake\Collection\CollectionInterface
Возвращает количество уникальных значений для столбца
Параметры
-
callable|string$field
Возвращает
Cake\Collection\CollectionInterfacecounter() public
counter(callable|null $counter): $this
Регистрирует вызываемую функцию, которая будет выполнена при вызове метода count в этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение метода count.
Это особенно полезно, когда вам нужно оптимизировать запрос для возврата количества, например, удаляя ненужные соединения, удаляя группировку или просто возвращая приблизительное количество строк.
Обратный вызов получит в качестве первого аргумента клон этого запроса, а не сам запрос.
Если первый параметр имеет нулевое значение, вместо этого будет вызвано встроенная функция счётчика.
Параметры
-
callable|null$counter Значение счётчика
Возвращает
$thisdecorateResults() public
decorateResults(callable|null $callback, bool $overwrite = false): $this
Регистрирует обратный вызов, который будет выполнен для каждого результата, извлечённого из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с сырыми данными из базы данных для каждой извлечённой строки и должна вернуть строку с любыми возможными изменениями.
Обратные вызовы будут выполняться лениво, если для базы данных извлечено только 3 строки, он будет вызван 3 раза, даже если в курсоре может быть больше строк.
Обратные вызовы будут расположены в порядке их регистрации. Если вы хотите сбросить стек, вызовите эту функцию со вторым параметром, установленным в true.
Если вы хотите удалить все декораторы из стека, установите первый параметр в null и второй в true.
Пример
$query->decorateResults(function ($row) {
$row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
return $row;
}); Параметры
-
callable|null$callback Обратный вызов, который нужно вызвать при извлечении результатов.
-
bool$overwrite optional Включить/выключить добавление или замену всех существующих декораторов.
Возвращает
$thisdelete() public
delete(string|null $table = null): $this
Создаёт запрос на удаление.
Изменяет тип запроса на 'delete'. Может быть объединён с методом where() для создания запросов на удаление.
Параметры
-
string|null$table optional Неиспользуемый параметр.
Возвращает
$thisdisableAutoFields() public
disableAutoFields(): $this
Отключает автоматическое добавление полей.
Возвращает
$thisdisableBufferedResults() public
disableBufferedResults(): $this
Отключает буферизацию результатов.
Отключение буферизации уменьшит потребление памяти, поскольку извлечённые результаты не сохраняются для будущих итераций.
Возвращает
$thisdisableHydration() public
disableHydration(): $this
Отключает гидратацию сущностей.
Отключение гидратации приведет к возвращению массива результатов для запроса вместо сущностей.
Возвращает
$thisdisableResultsCasting() public
disableResultsCasting(): $this
Отключает преобразование результатов.
При отключении поля будут возвращены в том виде, в котором они были получены от драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может повысить производительность с большими наборами данных.
Возвращает
$thisdistinct() public
distinct(Cake\Database\ExpressionInterface|array|string|bool $on = [], bool $overwrite = false): $this
Добавляет условие DISTINCT к запросу для удаления дубликатов из набора результатов. Это условие может быть использовано только для запросов SELECT.
Если вы хотите отфильтровать дубликаты на основе строк, имеющих определённое поле или набор полей, вы можете передать массив полей для фильтрации. Имейте в виду, что этот параметр может не поддерживаться во всех системах баз данных.
Примеры:
// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();
// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');
// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true); Параметры
-
Cake\Database\ExpressionInterface|array|string|bool$on optional Включить/выключить distinct класс или список полей для фильтрации
-
bool$overwrite optional Сбросить поля с переданным списком или нет
Возвращает
$thiseach() public @method
each(callable $c): Cake\Collection\CollectionInterface
Передаёт каждый результат запроса в вызываемый объект
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfaceeagerLoaded() public
eagerLoaded(bool $value): $this
Устанавливает экземпляр запроса как запрос с ленивой загрузкой. Если аргумент не передан, возвращается текущее значение конфигурированного запроса _eagerLoaded.
Параметры
-
bool$value Загружать лениво или нет.
Возвращает
$thisenableAutoFields() public
enableAutoFields(bool $value = true): $this
Устанавливает, следует ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключит автополя. Вы можете повторно включить автополя с помощью этого метода.
Параметры
-
bool$value optional Установите значение true для включения, false для отключения.
Возвращает
$thisenableBufferedResults() public
enableBufferedResults(bool $enable = true): $this
Включает/Отключает буферизованные результаты.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет итерировать набор результатов несколько раз или кэшировать и итерировать его.
При отключении это позволит сэкономить память, так как полученные результаты не будут запоминаться для будущих итераций.
Параметры
-
bool$enable optional Включить ли буферизацию
Возвращает
$thisenableHydration() public
enableHydration(bool $enable = true): $this
Переключает гидратацию сущностей.
Если установлено значение false, для запроса будут возвращены результаты массива.
Параметры
-
bool$enable optional Используйте булево значение для установки режима гидратации.
Возвращает
$thisenableResultsCasting() public
enableResultsCasting(): $this
Включает преобразование результатов.
При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующий PHP тип данных.
Возвращает
$thisepilog() public
epilog(Cake\Database\ExpressionInterface|string|null $expression = null): $this
Строка или выражение, которое будет добавлено к сгенерированному запросу
Примеры:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Содержание эпилога — это сырой SQL и не подходит для использования с данными, предоставленными пользователем.
Параметры
-
Cake\Database\ExpressionInterface|string|null$expression optional Выражение для добавления
Возвращает
$thisevery() public @method
every(callable $c): bool
Возвращает true, если все результаты проходят проверку вызываемого объекта
Параметры
-
callable$c
Возвращает
boolexecute() public
execute(): Cake\Database\StatementInterface
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключения, настроенного для соединения. Возвращает объект resultig statement.
Выполнение запроса внутри выполняет несколько шагов: сначала соединение преобразует этот объект в соответствии со своим конкретным диалектом, что может привести к генерации другого объекта Query, который будет фактически выполнен. Сразу после этого литеральные значения передаются соединению, чтобы они были привязаны к запросу безопасным способом. Наконец, resultig statement декорируется пользовательскими объектами для выполнения обратных вызовов для каждой полученной строки, если необходимо.
Результат Traversable, поэтому его можно использовать в любом цикле так же, как вы бы это делали с массивом.
Этот метод может быть переопределен в подклассах запросов для декорирования поведения при выполнении запросов.
Возвращает
Cake\Database\StatementInterfaceexpr() public
expr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Это полезная функция при построении сложных запросов с помощью интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
Вы можете необязательно передать строку с сырым SQL или массив или выражения в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression optional Строка, массив или любой объект, который вы хотите обернуть в объект expression
Возвращает
Cake\Database\Expression\QueryExpressionextract() public @method
extract(mixed $field): Cake\Collection\CollectionInterface
Извлекает один столбец из каждой строки
Параметры
- $field
Возвращает
Cake\Collection\CollectionInterfacefilter() public @method
filter(callable $c = null): Cake\Collection\CollectionInterface
Сохраняет результаты, используя проходящий тест вызываемого объекта
Параметры
-
callable$c optional
Возвращает
Cake\Collection\CollectionInterfacefind() 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
Возвращает первый результат выполнения этого запроса. Если запрос еще не выполнен, он установит условие ограничения до 1 для повышения производительности.
Пример:
$singleUser = $query->select(['id', 'username'])->first();
Возвращает
Cake\Datasource\EntityInterface|array|nullfirstOrFail() public
firstOrFail(): Cake\Datasource\EntityInterface|array
Получить первый результат из выполняемого запроса или выбросить исключение.
Возвращает
Cake\Datasource\EntityInterface|arrayИсключения
Cake\Datasource\Exception\RecordNotFoundExceptionПри отсутствии первой записи.
formatResults() public
formatResults(callable|null $formatter = null, int|bool $mode = self::APPEND): $this
Регистрирует новую функцию обратного вызова форматирования, которая должна выполняться при попытке извлечения результатов из базы данных.
Если второй аргумент установлен в true, он удалит предыдущие форматировщики и заменит их переданным первым аргументом.
Обратные вызовы должны возвращать объект-итератор, который будет использоваться в качестве значения возврата для результата этого запроса. Функции форматирования применяются после выполнения всех MapReduce процедур для этого запроса.
Функции обратного вызова форматирования будут получать два аргумента: первый — объект, реализующий \Cake\Collection\CollectionInterface, который можно перебирать и изменять по своему усмотрению. Второй — экземпляр запроса, к которому применяется функция обратного вызова форматирования.
Как правило, экземпляр запроса, полученный функцией обратного вызова форматирования, является тем же экземпляром запроса, к которому был прикреплен обратный вызов, за исключением соединенной ассоциации, в этом случае обратный вызов будет вызван со стороны запроса источника ассоциации, и он получит этот экземпляр запроса вместо экземпляра запроса, к которому первоначально был прикреплен обратный вызов — см. примеры ниже!
Примеры:
Возвращает все результаты из таблицы, индексированные по id:
$query->select(['id', 'name'])->formatResults(function ($results) {
return $results->indexBy('id');
}); Добавляет новый столбец в ResultSet:
$query->select(['name', 'birth_date'])->formatResults(function ($results) {
return $results->map(function ($row) {
$row['age'] = $row['birth_date']->diff(new DateTime)->y;
return $row;
});
}); Добавляет новый столбец в результаты с учетом конфигурации гидратации запроса:
$query->formatResults(function ($results, $query) {
return $results->map(function ($row) use ($query) {
$data = [
'bar' => 'baz',
];
if ($query->isHydrationEnabled()) {
$row['foo'] = new Foo($data)
} else {
$row['foo'] = $data;
}
return $row;
});
}); Сохранение доступа к целевому экземпляру запроса ассоциации соединенных ассоциаций, унаследованным аргументом запроса вызова содержит:
// Assuming a `Articles belongsTo Authors` association that uses the join strategy
$articlesQuery->contain('Authors', function ($authorsQuery) {
return $authorsQuery->formatResults(function ($results, $query) use ($authorsQuery) {
// Here `$authorsQuery` will always be the instance
// where the callback was attached to.
// The instance passed to the callback in the second
// argument (`$query`), will be the one where the
// callback is actually being applied to, in this
// example that would be `$articlesQuery`.
// ...
return $results;
});
}); Параметры
-
callable|null$formatter optional Вызываемый объект форматирования.
-
int|bool$mode optional Заменить, добавить или добавить вызываемый объект форматирования.
Возвращает
$thisИсключения
InvalidArgumentExceptionfrom() public
from(array|string $tables = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц, которые будут использоваться в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражения, одно выражение или одна строка.
Если передается массив, ключи будут использоваться для алиасов таблиц, используя значение в качестве реального поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты Query.
По умолчанию эта функция будет добавлять любой переданный аргумент в список таблиц для выбора, если второй аргумент не установлен в значение true.
Этот метод можно использовать для запросов select, update и delete.
Примеры:
$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub Параметры
-
array|string$tables optional таблицы для добавления в список. Этот аргумент может быть передан как массив строк, массив объектов выражения или одна строка. См. примеры выше для допустимых типов вызовов.
-
bool$overwrite optional перезаписывать ли таблицы переданным списком или нет
Возвращает
$thisfunc() public
func(): Cake\Database\FunctionsBuilder
Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных функций SQL.
Пример:
$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02']) Возвращает
Cake\Database\FunctionsBuildergetConnection() public
getConnection(): Cake\Database\Connection
Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Возвращает
Cake\Database\ConnectiongetContain() public
getContain(): array
Возвращает
arraygetDefaultTypes() public
getDefaultTypes(): array<int|string, string>
Получает типы по умолчанию текущей карты типов.
Возвращает
array<int|string, string>getEagerLoader() public
getEagerLoader(): Cake\ORM\EagerLoader
Возвращает текущий сконфигурированный экземпляр.
Возвращает
Cake\ORM\EagerLoadergetIterator() public
getIterator(): Cake\Datasource\ResultSetInterface
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без ручного вызова execute(), что делает его похожим на результат набора, а не сам запрос.
Возвращает
Cake\Datasource\ResultSetInterfacegetMapReducers() public
getMapReducers(): array
Возвращает список ранее зарегистрированных процедур map reduce.
Возвращает
arraygetOptions() public
getOptions(): array
Возвращает массив с настраиваемыми параметрами, которые были применены к этому запросу и которые еще не были обработаны другим методом в этом классе.
Пример:
$query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']); $query->getOptions(); // Returns ['doABarrelRoll' => true]
Возвращает
arrayСм. также
applyOptions()
getRepository() public @method
getRepository(): Cake\ORM\Table
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в предложении from.
Возвращает
Cake\ORM\TablegetResultFormatters() public
getResultFormatters(): array<callable>
Возвращает список ранее зарегистрированных процедур форматирования.
Возвращает
array<callable>getSelectTypeMap() public
getSelectTypeMap(): Cake\Database\TypeMap
Получает класс TypeMap, где хранятся типы для каждого поля в предложении select.
Возвращает
Cake\Database\TypeMapgetTypeMap() public
getTypeMap(): Cake\Database\TypeMap
Возвращает существующую карту типов.
Возвращает
Cake\Database\TypeMapgetValueBinder() public
getValueBinder(): Cake\Database\ValueBinder
Возвращает используемый в настоящее время экземпляр ValueBinder.
ValueBinder отвечает за генерацию заглушек запроса и временное связывание значений с этими заглушками, чтобы они могли быть правильно переданы объекту запроса.
Возвращает
Cake\Database\ValueBindergroup() public
group(Cake\Database\ExpressionInterface|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей, которые будут использоваться в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражения, одно выражение или одна строка.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей для группировки, если второй аргумент не установлен в значение true.
Примеры:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Поля группировки не подходят для использования с пользовательскими данными, так как они не проверяются на безопасность в генераторе запросов.
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields поля, которые нужно добавить в список
-
bool$overwrite optional перезаписывать ли поля переданным списком или нет
Возвращает
$thisgroupBy() public @method
groupBy(callable|string $field): Cake\Collection\CollectionInterface
Группирует все результаты в памяти по значению столбца.
Параметры
-
callable|string$field
Возвращает
Cake\Collection\CollectionInterfacehaving() public
having(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использоваться в предложении HAVING для этого запроса. Этот метод работает точно так же, как и метод where(). Обратитесь к его документации для получения информации о том, как использовать каждый параметр.
Поля Having не подходят для использования с пользовательскими данными, так как они не проверяются на безопасность в генераторе запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions optional Условия having.
-
array<string, string>$types optional Ассоциативный массив имен типов, используемых для привязки значений к запросу
-
bool$overwrite optional перезаписывать ли условия переданным списком или нет
Возвращает
$thisСм. также
identifier() public
identifier(string $identifier): Cake\Database\ExpressionInterface
Создает выражение, которое ссылается на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
Значение используется как есть, и вам может потребоваться использовать псевдонимы или включить ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.
Пример
$query->newExpr()->lte('count', $query->identifier('total')); Параметры
-
string$identifier Идентификатор для выражения
Возвращает
Cake\Database\ExpressionInterfaceindexBy() public @method
indexBy(callable|string $callback): Cake\Collection\CollectionInterface
Возвращает результаты, индексированные по значению столбца.
Параметры
-
callable|string$callback
Возвращает
Cake\Collection\CollectionInterfaceinnerJoin() public
innerJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array<string, string> $types = []): $this
Добавляет одиночное условие INNER JOIN в запрос.
Это метод сокращённой записи для построения соединений через join().
Аргументы этого метода идентичны аргументам сокращённого метода leftJoin(), пожалуйста, обратитесь к описанию того метода для получения дополнительных деталей.
Параметры
-
array<string, mixed>|string$table Таблица для соединения.
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условие для соединения.
-
array<string, string>$types optional Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisinnerJoinWith() public
innerJoinWith(string $assoc, callable|null $builder = null): $this
Создаёт внутреннее соединение (INNER JOIN) с указанной таблицей ассоциации, сохраняя соответствие внешних ключей и настроенные условия, первоначально установленные для неё.
Эта функция добавит записи в contain граф.
Пример:
// Bring only articles that were tagged with 'cake'
$query->innerJoinWith('Tags', function ($q) {
return $q->where(['name' => 'cake']);
}); Это создаст следующий SQL:
SELECT Articles.* FROM articles Articles INNER JOIN tags Tags ON Tags.name = 'cake' INNER JOIN articles_tags ArticlesTags ON ArticlesTags.tag_id = Tags.id AND ArticlesTags.articles_id = Articles.id
Эта функция работает так же, как matching(), с разницей в том, что она не будет выбирать поля из ассоциации.
Параметры
-
string$assoc Ассоциация для соединения.
-
callable|null$builder optional Функция, которая получит предварительно созданный объект запроса, который может быть использован для добавления пользовательских условий или выбора некоторых полей.
Возвращает
$thisСм. также
insert() public
insert(array $columns, array<int|string, string> $types = []): $this
Создаёт запрос на вставку.
Это изменяет тип запроса на 'insert'. Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values()
Может использоваться совместно с методом where() для создания запросов на удаление.
Параметры
-
array$columns Столбцы для вставки.
-
array<int|string, string>$types optional Сопоставление столбцов и их типов данных.
Возвращает
$thisinto() public
into(string $table): $this
Устанавливает имя таблицы для запросов на вставку.
Параметры
-
string$table Имя таблицы для вставки.
Возвращает
$thisisAutoFieldsEnabled() public
isAutoFieldsEnabled(): bool|null
Получает, будет ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключит авто-поля. Вы можете снова включить авто-поля с помощью enableAutoFields().
Возвращает
bool|nullisBufferedResultsEnabled() public
isBufferedResultsEnabled(): bool
Возвращает, включены/выключены буферизованные результаты.
При включённом значении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать результат или кэшировать и итерировать его.
При отключённом значении используется меньше памяти, так как полученные результаты не запоминаются для последующих итераций.
Возвращает
boolisEagerLoaded() public
isEagerLoaded(): bool
Возвращает текущее значение запроса _eagerLoaded.
Возвращает
boolisEmpty() public @method
isEmpty(): bool
Возвращает true, если в этом запросе не найдено результатов.
Возвращает
boolisHydrationEnabled() public
isHydrationEnabled(): bool
Возвращает текущий режим гидратации.
Возвращает
boolisResultsCastingEnabled() public
isResultsCastingEnabled(): bool
Возвращает, включено/выключено преобразование результатов.
При включённом значении поля в результатах, возвращаемых этим запросом, будут преобразовываться в соответствующие типы данных PHP.
При отключённом значении поля будут возвращены в виде полученных из драйвера базы данных (что в большинстве сред означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.
Возвращает
booljoin() public
join(array<string, mixed>|string $tables, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц для использования в качестве условий JOIN в этом запросе. Таблицы могут быть переданы в виде массива строк, массива, описывающего части соединения, массива с несколькими описаниями соединения или одной строкой.
По умолчанию эта функция добавляет любой переданный аргумент в список таблиц для соединения, если только третий аргумент не установлен в true.
Если тип соединения не указан, используется INNER JOIN по умолчанию: $query->join(['authors']) даст INNER JOIN authors ON 1 = 1.
Также можно алиасить соединения, используя ключ массива: $query->join(['a' => 'authors']) даст INNER JOIN authors a ON 1 = 1.
Соединение можно полностью описать и алиасить, используя обозначение массива:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id Вы даже можете указать несколько соединений в массиве, включая полное описание:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
],
'p' => [
'table' => 'publishers',
'type' => 'INNER',
'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation" Использование условий и типов
Условия могут быть выражены, как в примерах выше, с использованием строки для сравнения столбцов или строки с уже процитированными литеральными значениями. Дополнительно можно использовать условия, выраженные в массивах или объектах выражений.
При использовании массивов для выражения условий часто желательно преобразовать литеральные значения в правильное представление базы данных. Это достигается с помощью второго параметра этой функции.
$query->join(['a' => [
'table' => 'articles',
'conditions' => [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean']) Перезапись соединений
При создании алиасированных соединений с помощью обозначения массива вы можете перезаписать предыдущие определения соединений, используя тот же алиас в последующих вызовах этой функции, или вы можете заменить все ранее определённые соединения другим списком, если третий параметр этой функции установлен в true.
$query->join(['alias' => 'table']); // joins table with as alias $query->join(['alias' => 'another_table']); // joins another_table with as alias $query->join(['something' => 'different_table'], [], true); // resets joins list
Параметры
-
array<string, mixed>|string$tables Список таблиц, которые должны быть объединены в запросе.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для связывания значений с запросом.
-
bool$overwrite optional Выполнять ли сброс соединений с переданным списком или нет.
Возвращает
$thisСм. также
jsonSerialize() public
jsonSerialize(): Cake\Datasource\ResultSetInterface
Выполняет запрос и преобразует результат в JSON.
Часть интерфейса JsonSerializable.
Возвращает
Cake\Datasource\ResultSetInterfacelast() public @method
last(): mixed
Возвращает последнюю строку результата запроса.
Возвращает
mixedleftJoin() public
leftJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет одиночное условие LEFT JOIN в запрос.
Это метод сокращённой записи для построения соединений через join().
Имя таблицы может быть передано как строка или как массив, в случае необходимости алиасирования:
// LEFT JOIN authors ON authors.id = posts.author_id
$query->leftJoin('authors', 'authors.id = posts.author_id');
// LEFT JOIN authors a ON a.id = posts.author_id
$query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id'); Условия могут быть переданы как строки, массивы или объекты выражений. При использовании массивов можно комбинировать их с параметром $types для определения способа преобразования значений:
$query->leftJoin(['a' => 'articles'], [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
], ['a.posted' => 'datetime', 'a.published' => 'boolean']); См. join() для получения дополнительных сведений о условиях и типах.
Параметры
-
array<string, mixed>|string$table Таблица для соединения.
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условие для соединения.
-
array$types optional Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisleftJoinWith() public
leftJoinWith(string $assoc, callable|null $builder = null): $this
Создаёт LEFT JOIN с переданной таблицей связи, сохраняя соответствие внешних ключей и настраиваемые условия, которые изначально были для него заданы.
Эта функция добавит записи в граф contain.
Пример:
// Get the count of articles per user
$usersQuery
->select(['total_articles' => $query->func()->count('Articles.id')])
->leftJoinWith('Articles')
->group(['Users.id'])
->enableAutoFields(); Вы также можете настроить условия, переданные в LEFT JOIN:
// Get the count of articles per user with at least 5 votes
$usersQuery
->select(['total_articles' => $query->func()->count('Articles.id')])
->leftJoinWith('Articles', function ($q) {
return $q->where(['Articles.votes >=' => 5]);
})
->group(['Users.id'])
->enableAutoFields(); Это создаст следующий SQL:
SELECT COUNT(Articles.id) AS total_articles, Users.* FROM users Users LEFT JOIN articles Articles ON Articles.user_id = Users.id AND Articles.votes >= 5 GROUP BY USers.id
Возможна левая связь с глубокими ассоциациями с использованием нотации точки
Пример:
// Total comments in articles by 'markstory'
$query
->select(['total_comments' => $query->func()->count('Comments.id')])
->leftJoinWith('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
})
->group(['Users.id']); Обратите внимание, что запрос, переданный в замыкание, будет принимать только вызовы select, where, andWhere и orWhere. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в основном запросе.
Параметры
-
string$assoc Связь для объединения
-
callable|null$builder необязательный функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$thislimit() 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 количество записей для возврата
Возвращает
$thismap() public @method
map(callable $c): Cake\Collection\CollectionInterface
Изменяет каждый из результатов, используя вызываемый объект.
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfacemapReduce() public
mapReduce(callable|null $mapper = null, callable|null $reducer = null, bool $overwrite = false): $this
Регистрирует новую процедуру MapReduce, которая должна быть выполнена поверх результатов базы данных. И вызываемый объект-маппер, и вызываемый объект-редуктор должны быть вызываемыми объектами.
Процедура MapReduce будет выполняться только при выполнении запроса и попытке извлечения первого результата.
Если третий аргумент установлен в true, он удалит предыдущие функции map и reduce и заменит их переданными аргументами.
Параметры
-
callable|null$mapper необязательный Вызываемый объект-маппер.
-
callable|null$reducer необязательный Функция редукции.
-
bool$overwrite необязательный Установите в значение true, чтобы перезаписать существующие функции map + reduce.
Возвращает
$thisСм. также
matching() public
matching(string $assoc, callable|null $builder = null): $this
Добавляет условия фильтрации к этому запросу, чтобы отобразить только строки, имеющие отношение к другой строке из связанной таблицы, на основе условий в связанной таблице.
Эта функция добавит записи в граф contain.
Пример:
// Bring only articles that were tagged with 'cake'
$query->matching('Tags', function ($q) {
return $q->where(['name' => 'cake']);
}); Возможно фильтровать по глубоким ассоциациям с использованием нотации точки:
Пример:
// Bring only articles that were commented by 'markstory'
$query->matching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Поскольку эта функция создаёт INNER JOIN, вам может потребоваться вызвать distinct для этого запроса, так как вы можете получить дублирующиеся строки, если ваши условия не фильтруют их уже. Например, это может быть случай, когда один и тот же пользователь комментирует одну и ту же статью несколько раз.
Пример:
// Bring unique articles that were commented by 'markstory'
$query->distinct(['Articles.id'])
->matching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Обратите внимание, что запрос, переданный в замыкание, будет принимать только вызовы select, where, andWhere и orWhere. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в главном запросе.
Параметры
-
string$assoc Связь для фильтрации
-
callable|null$builder необязательный функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$thismax() public @method
max(mixed $field): mixed
Возвращает максимальное значение для одного столбца во всех результатах.
Параметры
- $field
Возвращает
mixedmin() public @method
min(mixed $field): mixed
Возвращает минимальное значение для одного столбца во всех результатах.
Параметры
- $field
Возвращает
mixedmodifier() public
modifier(Cake\Database\ExpressionInterface|array|string $modifiers, bool $overwrite = false): $this
Добавляет один или несколько модификаторов SELECT для использования в SELECT.
По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в значение true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
-
Cake\Database\ExpressionInterface|array|string$modifiers модификаторы, которые нужно применить к запросу
-
bool$overwrite необязательный нужно ли сбросить порядок с помощью списка полей или нет
Возвращает
$thisnest() public @method
nest(mixed $k, mixed $p, mixed $n = 'children'): Cake\Collection\CollectionInterface
Создаёт древовидную структуру путём вложенности значений столбца $p в тот, который имеет то же значение для $k, используя $n в качестве ключа вложенности.
Параметры
- $k
- $p
- $n необязательный
Возвращает
Cake\Collection\CollectionInterfacenewExpr() public
newExpr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта функция полезна при создании сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
Вы можете необязательно передать строку SQL в сыром виде или массив выражений в любом формате, принимаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->expr(); // Returns an empty expression object
$expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression необязательный Строка, массив или любой другой объект, который вы хотите обернуть в объект выражения
Возвращает
Cake\Database\Expression\QueryExpressionnotMatching() public
notMatching(string $assoc, callable|null $builder = null): $this
Добавляет условия фильтрации к этому запросу, чтобы отобразить только строки, не имеющие совпадений с другой строкой из связанной таблицы, на основе условий в связанной таблице.
Эта функция добавит записи в граф contain.
Пример:
// Bring only articles that were not tagged with 'cake'
$query->notMatching('Tags', function ($q) {
return $q->where(['name' => 'cake']);
}); Возможно фильтровать по глубоким ассоциациям с использованием нотации точки:
Пример:
// Bring only articles that weren't commented by 'markstory'
$query->notMatching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Поскольку эта функция создаёт LEFT JOIN, вам может потребоваться вызвать distinct для этого запроса, так как вы можете получить дублирующиеся строки, если ваши условия не фильтруют их уже. Например, это может быть случай, когда одна и та же статья имеет несколько комментариев.
Пример:
// Bring unique articles that were commented by 'markstory'
$query->distinct(['Articles.id'])
->notMatching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Обратите внимание, что запрос, переданный в замыкание, будет принимать только вызовы select, where, andWhere и orWhere. Если вам нужно добавить более сложные условия, вы можете сделать это непосредственно в главном запросе.
Параметры
-
string$assoc Связь для фильтрации
-
callable|null$builder необязательный функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$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 необязательно нужно ли сбросить порядок со списком полей или нет
Возвращает
$thisorderAsc() public
orderAsc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавляет в запрос условие ORDER BY с направлением ASC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order().
Поля сортировки не подходят для использования с пользовательскими данными, так как они не очищаются создателем запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Нужно ли сбросить условия сортировки.
Возвращает
$thisorderDesc() public
orderDesc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавляет в запрос условие ORDER BY с направлением DESC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order().
Поля сортировки не подходят для использования с пользовательскими данными, так как они не очищаются создателем запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Нужно ли сбросить условия сортировки.
Возвращает
$thispage() public
page(int $num, int|null $limit = null): $this
Устанавливает страницу результатов, которую вы хотите получить.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit будет по умолчанию равен существующему условию limit, а если и оно пустое, то 25 будет использоваться.
Страницы должны начинаться с 1.
Параметры
-
int$num Номер страницы, которую вы хотите.
-
int|null$limit необязательно Количество строк на странице. Если null, будет использоваться текущее условие limit.
Возвращает
$thisИсключения
InvalidArgumentExceptionЕсли номер страницы < 1.
reduce() public @method
reduce(callable $c, mixed $zero = null): mixed
Складывает все результаты в одно значение с помощью вызываемой функции.
Параметры
-
callable$c - $zero необязательно
Возвращает
mixedreject() public @method
reject(callable $c): Cake\Collection\CollectionInterface
Удаляет результаты, проходящие проверку вызываемой функции.
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfaceremoveJoin() public
removeJoin(string $name): $this
Удаляет объединение, если оно было определено.
Полезно при переопределении объединений или при необходимости изменить порядок условий объединения.
Параметры
-
string$name Псевдоним/название объединения для удаления.
Возвращает
$thisrepository() public
repository(Cake\Datasource\RepositoryInterface $repository): $this
Устанавливает объект Table по умолчанию, который будет использоваться этим запросом и сформирует условие FROM.
Параметры
-
Cake\Datasource\RepositoryInterface$repository Объект таблицы по умолчанию для использования
Возвращает
$thisrightJoin() public
rightJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет одно условие RIGHT JOIN в запрос.
Это метод для быстрого создания объединений через join().
Аргументы этого метода идентичны сокращённому методу leftJoin(), обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
array<string, mixed>|string$table Таблица для объединения
-
Cake\Database\ExpressionInterface|array|string$conditions необязательно Условия для объединения.
-
array$types необязательно список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisrowCountAndClose() public
rowCountAndClose(): int
Выполняет SQL этого запроса и немедленно закрывает оператор перед возвращением количества строк, изменённых в результате выполнения.
Этот метод может быть использован с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчёта записей.
Пример
$rowCount = $query->update('articles')
->set(['published'=>true])
->where(['published'=>false])
->rowCountAndClose(); Приведённый пример изменит столбец published на true для всех записей со значением false и вернёт количество обновлённых записей.
Возвращает
intsample() public @method
sample(int $size = 10): Cake\Collection\CollectionInterface
Случайным образом перемешивает результаты в памяти и возвращает подмножество из них.
Параметры
-
int$size необязательно
Возвращает
Cake\Collection\CollectionInterfaceselect() public
select(Cake\Database\ExpressionInterface|callable|array|string $fields = [], bool $overwrite = false): $this
Добавляет новые поля, которые должны быть возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передаётся массив, ключи будут использоваться для присвоения псевдонимов полям, используя значение как фактическое поле для присвоения псевдонима. Можно присваивать псевдонимы строкам, объектам Expression или даже другим объектам Query.
Если передаётся функция-вызов, возвращаемый массив функции будет использован в качестве списка полей.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей для выбора, если второй аргумент не установлен в значение true.
Примеры:
$query->select(['id', 'title']); // Produces SELECT id, title
$query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
$query->select('id', true); // Resets the list: SELECT id
$query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
$query->select(function ($query) {
return ['article_id', 'total' => $query->count('*')];
}) По умолчанию поля не выбраны, если у вас есть экземпляр Cake\ORM\Query и вы пытаетесь добавить поля, вам также необходимо вызвать Cake\ORM\Query::enableAutoFields() для выбора полей по умолчанию из таблицы.
Если вы передаёте экземпляр класса Cake\ORM\Table или Cake\ORM\Association, все поля в схеме таблицы или ассоциации будут добавлены в условие select.
Параметры
-
Cake\Database\ExpressionInterface|callable|array|string$fields необязательно Поля, которые нужно добавить в список.
-
bool$overwrite необязательно нужно ли перезаписать поля переданным списком или нет
Возвращает
$thisselectAllExcept() public
selectAllExcept(Cake\ORM\TableCake\ORM\Association $table, array<string> $excludedFields, bool $overwrite = false): $this
Все поля, связанные с переданной таблицей, за исключением исключенных полей, будут добавлены в предложение select запроса. Переданные исключенные поля не должны иметь псевдонимы. После первого вызова этого метода второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте булево значение overwrite true, которое сбросит предложение select, удалив все предыдущие добавления.
Parameters
-
Cake\ORM\TableCake\ORM\Association$table Таблица, используемая для получения массива столбцов
-
array<string>$excludedFields Неалиасированные имена столбцов, которые вы не хотите выбирать из $table
-
bool$overwrite optional Необходимо ли сбросить/удалить ранее выбранные поля
Returns
$thisThrows
InvalidArgumentExceptionЕсли Association|Table не передается в первом аргументе
set() public
set(Cake\Database\Expression\QueryExpressionClosure|array|string $key, mixed $value = null, array<string, string>|string $types = []): $this
Установить одно или несколько полей для обновления.
Examples
Передача строки:
$query->update('articles')->set('title', 'The Title'); Передача массива:
$query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']); Передача вызываемого объекта:
$query->update('articles')->set(function ($exp) {
return $exp->eq('title', 'The title', 'string');
}); Parameters
-
Cake\Database\Expression\QueryExpressionClosure|array|string$key -
Имя столбца или массив ключей
- значения для установки. Это также может быть QueryExpression, содержащий фрагмент SQL. Это также может быть Closure, который должен возвращать объект выражения.
-
mixed$value optional Значение, на которое нужно обновить $key. Может быть null, если $key является массивом или QueryExpression. Когда $key является массивом, этот параметр будет использоваться как $types.
-
array<string, string>|string$types optional Типы столбцов для обработки данных.
Returns
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования этого запроса.
Parameters
-
Cake\Database\Connection$connection Экземпляр соединения
Returns
$thissetDefaultTypes() public
setDefaultTypes(array<int|string, string> $types): $this
Перезаписать сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно установить сопоставления типов, которые совместно используются несколькими функциями/выражениями в запросе.
Чтобы добавить значение по умолчанию без перезаписи существующих, используйте getTypeMap()->addDefaults()
Parameters
-
array<int|string, string>$types Массив типов для установки.
Returns
$thisSee Also
setEagerLoader() public
setEagerLoader(Cake\ORM\EagerLoader $instance): $this
Устанавливает экземпляр класса загрузчика eager, который будет использоваться для загрузки ассоциаций и хранения включений.
Parameters
-
Cake\ORM\EagerLoader$instance Загрузчик eager для использования.
Returns
$thissetResult() public
setResult(iterable $results): $this
Установить результирующий набор для запроса.
Установка результирующего набора запроса сделает execute() не выполняющим никаких действий. Вместо выполнения SQL-запроса и извлечения результатов будет возвращен ResultSet, предоставленный этому методу.
Этот метод наиболее полезен в сочетании с результатами, хранящимися в постоянном кэше.
Parameters
-
iterable$results Результаты, которые должен возвращать этот запрос.
Returns
$thissetSelectTypeMap() public
setSelectTypeMap(Cake\Database\TypeMap $typeMap): $this
Устанавливает класс TypeMap, где хранятся типы для каждого из полей в предложении select.
Parameters
-
Cake\Database\TypeMap$typeMap Объект карты для использования
Returns
$thissetTypeMap() public
setTypeMap(Cake\Database\TypeMap|array $typeMap): $this
Создает новый TypeMap, если $typeMap является массивом, в противном случае заменяет его на заданный.
Parameters
-
Cake\Database\TypeMap|array$typeMap Создает TypeMap, если массив, в противном случае устанавливает заданный TypeMap
Returns
$thissetValueBinder() public
setValueBinder(Cake\Database\ValueBinder|null $binder): $this
Перезаписать текущий связыватель значений
ValueBinder отвечает за генерацию заполнителей запроса и временное связывание значений с этими заполнителями, чтобы они могли быть правильно переданы объекту оператора.
Parameters
-
Cake\Database\ValueBinder|null$binder Связыватель или null для отключения связывания.
Returns
$thisshuffle() public @method
shuffle(): Cake\Collection\CollectionInterface
В памяти случайным образом упорядочивает возвращаемые результаты
Returns
Cake\Collection\CollectionInterfaceskip() public @method
skip(int $howMany): Cake\Collection\CollectionInterface
Пропускает некоторые строки с начала результата запроса.
Parameters
-
int$howMany
Returns
Cake\Collection\CollectionInterfacesome() public @method
some(callable $c): bool
Возвращает true, если хотя бы один из результатов проходит проверку вызываемого объекта
Parameters
-
callable$c
Returns
boolsortBy() public @method
sortBy(mixed $callback, int $dir): Cake\Collection\CollectionInterface
Сортирует запрос с помощью обратного вызова
Parameters
- $callback
-
int$dir
Returns
Cake\Collection\CollectionInterfacesql() public
sql(Cake\Database\ValueBinder|null $binder = null): string
Возвращает SQL-представление этого объекта.
Эта функция скомпилирует этот запрос, чтобы сделать его совместимым с SQL-диалектом, используемым соединением. Этот процесс может добавлять, удалять или изменять любую часть запроса или внутреннее выражение, чтобы сделать его исполняемым на целевой платформе.
Результирующий запрос может содержать заполнители, которые будут заменены фактическими значениями при выполнении запроса, поэтому он наиболее подходит для использования с подготовленными операторами.
Parameters
-
Cake\Database\ValueBinder|null$binder optional
Returns
stringstopWhen() public @method
stopWhen(callable $c): Cake\Collection\CollectionInterface
Возвращает каждую строку, пока вызываемый объект не вернет true.
Parameters
-
callable$c
Returns
Cake\Collection\CollectionInterfacesubquery() public static
subquery(Cake\ORM\Table $table): static
Возвращает новый запрос, в котором отключено автоматическое присвоение псевдонимов полей.
Parameters
-
Cake\ORM\Table$table Таблица, с которой начинается этот запрос
Returns
staticsumOf() public @method
sumOf(callable|string $field): float
Возвращает сумму всех значений для одного столбца
Parameters
-
callable|string$field
Returns
floattake() public @method
take(int $size = 1, int $from = 0): Cake\Collection\CollectionInterface
Ограничение и смещение для результатов запроса в оперативной памяти.
Параметры
-
int$size optional -
int$from optional
Возвращает
Cake\Collection\CollectionInterfacetoArray() public @method
toArray(): array
Возвращает массив ключ-значение с результатами этого запроса.
Возвращает
arraytoList() public @method
toList(): array
Возвращает массив с индексами результатов этого запроса.
Возвращает
arraytraverse() public
traverse(callable $callback): $this
Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Эта функция обычно используется для обхода всех частей запроса, которые будут использованы для построения запроса.
Обратный вызов получит 2 параметра: первый — значение части запроса, по которому происходит итерация, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}); Параметры
-
callable$callback Функция или вызываемый объект, который будет выполнен для каждой части.
Возвращает
$thistraverseExpressions() public
traverseExpressions(callable $callback): $this
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход всего дерева выражений. Она выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося внутри этого запроса на любой глубине в любой части запроса.
Обратный вызов получит в качестве первого параметра текущее посещённое выражение.
Параметры
-
callable$callback функция, которая будет выполнена для каждого объекта ExpressionInterface, найденного внутри этого запроса.
Возвращает
$thistraverseParts() public
traverseParts(callable $visitor, array<string> $parts): $this
Перебирает предоставленные части.
Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Этот метод может быть использован для обхода подмножества частей запроса для рендеринга SQL запроса.
Обратный вызов получит 2 параметра: первый — значение части запроса, по которому происходит итерация, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
-
callable$visitor Функция или вызываемый объект, который будет выполнен для каждой части.
-
array<string>$parts Список частей запроса для обхода.
Возвращает
$thistriggerBeforeFind() public
triggerBeforeFind(): void
Вызвать событие beforeFind для объекта репозитория запроса.
Будет вызван не более одного раза и только для запросов выбора.
Возвращает
voidtype() public
type(): string
Возвращает тип этого запроса (выбор, вставка, обновление, удаление)
Возвращает
stringunion() public
union(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет завершённый запрос для использования в сочетании с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызывая этот метод несколько раз с различными запросами.
По умолчанию оператор UNION удалит дублирующие строки. Если вы хотите включить каждую строку для всех запросов, используйте unionAll().
Примеры
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->union($union);
Произведёт:
SELECT id, name FROM things d UNION SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полный SQL запрос для использования в операторе UNION.
-
bool$overwrite optional Нужно ли сбросить список запросов для обработки или нет
Возвращает
$thisunionAll() public
unionAll(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет завершённый запрос для использования в сочетании с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с набором, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызывая этот метод несколько раз с различными запросами.
В отличие от UNION, UNION ALL не удалит дублирующие строки.
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
Произведёт:
SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полный SQL запрос для использования в операторе UNION.
-
bool$overwrite optional Нужно ли сбросить список запросов для обработки или нет
Возвращает
$thisupdate() public
update(Cake\Database\ExpressionInterface|string $table = null): $this
Создать запрос обновления.
Это изменяет тип запроса на 'update'. Может быть объединён с методами set() и where() для создания запросов обновления.
Параметры
-
Cake\Database\ExpressionInterface|string$table optional Неиспользуемый параметр.
Возвращает
$thisvalues() public
values(Cake\Database\Expression\ValuesExpressionCake\Database\Query|array $data): $this
Установить значения для запроса вставки.
Многократные вставки могут выполняться путём вызова values() более одного раза или путём предоставления массива наборов значений. Дополнительно $data может быть экземпляром Query для вставки данных из другого SELECT-запроса.
Параметры
-
Cake\Database\Expression\ValuesExpressionCake\Database\Query|array$data Данные для вставки.
Возвращает
$thisИсключения
Cake\Database\Exception\DatabaseExceptionесли вы попытаетесь установить значения до объявления столбцов. Или если вы попытаетесь установить значения для запросов, не являющихся запросами вставки.
where() public
where(Cake\Database\ExpressionInterfaceClosure|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-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно процитированы. Самое безопасное, что вы можете сделать, - это никогда не использовать строковые условия.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions optional Условия для фильтрации.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional нужно ли сбросить условия с переданным списком или нет
Возвращает
$thiswhereInList() public
whereInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки.
Варианты:
-
types- Ассоциативный массив имён типов, используемых для привязки значений к запросу -
allowEmpty- Разрешить пустой массив.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotInList() public
whereNotInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotInListOrNull() public
whereNotInListOrNull(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Это также позволяет полю быть null с условием IS NULL, так как значение null приведет к тому, что условие NOT IN всегда будет выполняться неуспешно.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotNull() public
whereNotNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, добавляющий условие NOT NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения или список их, которые не должны быть null.
Возвращает
$thiswhereNull() public
whereNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, добавляющий условие IS NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения или список их, которые должны быть null.
Возвращает
$thiswindow() public
window(string $name, Cake\Database\Expression\WindowExpressionClosure $window, bool $overwrite = false): $this
Добавляет именованное выражение окна.
Вы сами отвечаете за добавление окон в том порядке, в котором это требует ваша база данных.
Параметры
-
string$name Имя окна
-
Cake\Database\Expression\WindowExpressionClosure$window Выражение окна
-
bool$overwrite optional Очистить все предыдущие выражения окон запроса
Возвращает
$thiswith() public
with(Cake\Database\Expression\CommonTableExpressionClosure $cte, bool $overwrite = false): $this
Добавляет новое общее выражение с таблицей (CTE) в запрос.
Примеры:
Общие выражения с таблицей могут быть переданы как предварительно сконструированные объекты выражений:
$cte = new \Cake\Database\Expression\CommonTableExpression(
'cte',
$connection
->newQuery()
->select('*')
->from('articles')
);
$query->with($cte); или возвращены из замыкания, которое будет принимать новый объект общего выражения с таблицей в качестве первого аргумента и новый пустой объект запроса в качестве второго аргумента:
$query->with(function (
\Cake\Database\Expression\CommonTableExpression $cte,
\Cake\Database\Query $query
) {
$cteQuery = $query
->select('*')
->from('articles');
return $cte
->name('cte')
->query($cteQuery);
}); Параметры
-
Cake\Database\Expression\CommonTableExpressionClosure$cte Добавляемое CTE.
-
bool$overwrite optional Установить ли список CTE в исходное состояние.
Возвращает
$thiszip() public @method
zip(arrayTraversable $c): Cake\Collection\CollectionInterface
Возвращает первый результат как из запроса, так и из $c в массиве, затем второй результат и так далее.
Параметры
-
arrayTraversable$c
Возвращает
Cake\Collection\CollectionInterfacezipWith() public @method
zipWith(mixed $collections, callable $callable): Cake\Collection\CollectionInterface
Возвращает каждый из результатов, полученных при вызове $c с первой строкой запроса и каждым из элементов, затем второй строкой и так далее.
Параметры
- $collections
-
callable$callable
Возвращает
Cake\Collection\CollectionInterfaceПодробное описание свойства
$_autoFields protected
Отслеживает, следует ли исходному запросу включать поля из таблицы верхнего уровня.
Тип
bool|null$_beforeFindFired protected
Истина, если событие beforeFind уже было инициировано для этого запроса.
Тип
bool$_cache protected
Экземпляр кэшера запросов, если для этого запроса включен кэширование.
Тип
Cake\Datasource\QueryCacher|null$_connection protected
Экземпляр соединения, используемый для выполнения этого запроса.
Тип
Cake\Database\Connection$_counter protected
Вызываемая функция, которая может использоваться для расчета общего количества записей, которые этот запрос сопоставит, когда не используется limit.
Тип
callable|null$_deleteParts protected deprecated
Список элементов запроса, для обхода при генерации оператора DELETE.
Тип
array<string>$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
Тип
bool$_eagerLoaded protected
Является ли запрос автономным или результатом операции eager load.
Тип
bool$_eagerLoader protected
Экземпляр класса, ответственного за хранение содержаний ассоциаций и их eager загрузку при выполнении этого запроса.
Тип
Cake\ORM\EagerLoader|null$_formatters protected
Список классов или обратных вызовов форматировщиков, которые будут пост-обрабатывать результаты при извлечении.
Тип
array<callable>$_functionsBuilder protected
Экземпляр объекта-строителя функций, используемого для генерации произвольных SQL-функций.
Тип
Cake\Database\FunctionsBuilder|null$_hasFields protected
Выбрал ли пользователь какие-либо поля перед выполнением. Это используется для определения, следует ли автоматически выбирать какие-либо поля.
Тип
bool|null$_hydrate protected
Необходимо ли гидратировать результаты в объекты сущностей.
Тип
bool$_insertParts protected deprecated
Список элементов запроса для обхода при генерации оператора INSERT.
Тип
array<string>$_iterator protected
Объект оператора, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_mapReduce protected
Список процедур map-reduce, которые должны быть применены к результату запроса.
Тип
array$_options protected
Содержит любые пользовательские параметры, переданные с помощью applyOptions, которые не могли быть обработаны любым методом в этом классе.
Тип
array$_parts protected
Список SQL-элементов, которые будут использоваться для построения этого запроса.
Тип
array<string, mixed>$_repository public @property
Экземпляр объекта таблицы, к которому привязан этот запрос.
Тип
Cake\ORM\Table$_resultDecorators protected
Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующего оператора при получении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.
Тип
array<callable>$_results protected
Результат набора.
При установке выполнение запроса будет пропущено.
Тип
iterable|null$_resultsCount protected
Значение COUNT(*) для запроса.
При установке выполнение запроса COUNT будет пропущено.
Тип
int|null$_selectParts protected deprecated
Список элементов запроса, для обхода при генерации оператора SELECT.
Тип
array<string>$_selectTypeMap protected
Карта типов для полей в операторе select.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (select, insert, update, delete).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected deprecated
Список элементов запроса для обхода при генерации оператора UPDATE.
Тип
array<string>$_useBufferedResults protected
Булево значение для отслеживания включения буферизованных результатов.
Тип
bool$_valueBinder protected
Объект, ответственный за генерацию заглушек запроса и временное хранение значений, связанных с каждой из них.
Тип
Cake\Database\ValueBinder|null$aliasingEnabled protected
Включены ли псевдонимы для полей.
Тип
bool$typeCastEnabled protected
Флаг отслеживания для отключения преобразования типов.
Тип
bool
© 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.4/class-Cake.ORM.Query.html