Класс 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
string[]Список узлов запроса, по которым происходит обход для генерации оператора DELETE.
- $_dirty protected
boolУказывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
- $_eagerLoaded protected
boolЯвляется ли запрос самостоятельным или результатом операции eager load.
- $_eagerLoader protected
Cake\ORM\EagerLoader|nullЭкземпляр класса, ответственного за хранение содержаний ассоциаций и их eager загрузку при выполнении этого запроса.
- $_formatters protected
callable[]Список классов или обратных вызовов форматирования, которые будут выполнять пост-обработку результатов при извлечении.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullИнстанс объекта-строителя функций, используемого для генерации произвольных SQL функций.
- $_hasFields protected
bool|nullУказывает, выбрал ли пользователь какие-либо поля перед выполнением. Это используется для определения, должны ли быть автоматически выбраны какие-либо поля.
- $_hydrate protected
boolНужно ли гидратировать результаты в объекты сущностей.
- $_insertParts protected
string[]Список узлов запроса, по которым происходит обход для генерации оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_mapReduce protected
arrayСписок map-reduce процедур, которые должны быть применены к результату запроса.
- $_options protected
arrayХранит любые пользовательские опции, переданные с помощью applyOptions, которые не могли быть обработаны ни одним методом в этом классе.
- $_parts protected
arrayСписок SQL частей, которые будут использоваться для построения этого запроса.
- $_repository public @property
Cake\ORM\TableЭкземпляр объекта таблицы, к которой привязан этот запрос.
- $_resultDecorators protected
callable[]Список функций обратного вызова, которые вызываются для изменения каждой строки из результирующего оператора при извлечении. Каждая из функций обратного вызова будет получать массив строк в качестве первого аргумента.
- $_results protected
iterable|nullРезультирующий набор.
- $_resultsCount protected
int|nullЗначение COUNT(*) для запроса.
- $_selectParts protected
string[]Список узлов запроса, по которым происходит обход для генерации оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в операторе SELECT.
- $_type protected
stringТип этого запроса (select, insert, update, delete).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected
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-представление этого запроса и выполняет его с использованием объекта соединения, настроенного в конфигурации. Возвращает объект результирующего оператора.
-
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. -
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
Устанавливает объект Table по умолчанию, который будет использоваться этим запросом и формирует
FROMусловие. -
rightJoin() public
Добавляет условие RIGHT JOIN к запросу.
-
rowCountAndClose() public
Выполняет SQL этого запроса и немедленно закрывает оператор перед возвратом количества строк изменённых записей.
-
sample() public @method
Перемешивает результаты в памяти и возвращает подмножество из них.
-
select() public
Добавляет новые поля, которые должны возвращаться оператором
SELECT, когда этот запрос выполняется. Поля могут быть переданы как массив строк, массив объектов выражений, один объект выражения или одна строка. -
selectAllExcept() public
Все поля, связанные с переданной таблицей, кроме исключённых полей, будут добавлены в предложение select запроса. Переданные исключённые поля не должны быть алиасами. После первого вызова этого метода второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте boolean overwrite со значением true, что сбросит предложение select, удалив все предыдущие добавления.
-
set() public
Установить одно или несколько полей для обновления.
-
setConnection() public
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
-
setDefaultTypes() public
Переопределяет сопоставления типов по умолчанию для полей в реализующем объекте.
-
setEagerLoader() public
Устанавливает экземпляр класса eager loader, который будет использоваться для загрузки ассоциаций и хранения содержаний.
-
setResult() public
Устанавливает набор результатов для запроса.
-
setSelectTypeMap() public
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении SELECT.
-
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 для этого запроса.
-
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
Позволяет вызывать методы из результирующего набора, как если бы они были из этого класса
Parameters
-
string$method метод для вызова
-
array$arguments список аргументов для вызываемого метода
Returns
mixedThrows
BadMethodCallExceptionесли метод вызывается для не-SELECT запроса
__clone() public
__clone(): void
Обрабатывает очистку итератора и клонирование всех выражений и привязок значений.
Обрабатывает клонирование eager loaders.
Returns
void__construct() public
__construct(Cake\Database\Connection $connection, Cake\ORM\Table $table)
Конструктор
Parameters
-
Cake\Database\Connection$connection Объект подключения
-
Cake\ORM\Table$table Таблица, с которой начинается этот запрос
__debugInfo() public
__debugInfo(): array
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
Returns
array__toString() public
__toString(): string
Возвращает строковое представление этого запроса (полное SQL-выражение).
Returns
string_addAssociationsToTypeMap() protected
_addAssociationsToTypeMap(Cake\ORM\Table $table, Cake\Database\TypeMap $typeMap, array $associations): void
Используется для рекурсивного добавления содержащихся типов столбцов ассоциаций в запрос.
Parameters
-
Cake\ORM\Table$table Экземпляр таблицы для извлечения ассоциаций.
-
Cake\Database\TypeMap$typeMap Карта типов для проверки столбцов. Эта карта типов неявно изменяется через Cake\ORM\Query::addDefaultTypes()
-
array$associations Вложенное дерево ассоциаций для обхода.
Returns
void_addDefaultFields() protected
_addDefaultFields(): void
Проверяет, есть ли какие-либо установленные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
Returns
void_addDefaultSelectTypes() protected
_addDefaultSelectTypes(): void
Устанавливает типы по умолчанию для преобразования полей в предложении select
Returns
void_conjugate() protected
_conjugate(string $part, string|arrayCake\Database\ExpressionInterfaceClosure|null $append, string $conjunction, array $types): void
Вспомогательная функция, используемая для построения условий путем составления объектов QueryExpression.
Parameters
-
string$part Имя части запроса, к которой нужно добавить новую часть
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$append Выражение или функция построения для добавления.
-
string$conjunction тип конъюнкции, который будет использоваться для обработки части
-
array$types ассоциативный массив имен типов, используемых для привязки значений к запросу
Returns
void_decorateResults() protected
_decorateResults(Traversable $result): Cake\Datasource\ResultSetInterface
Декорирует итератор результатов с помощью подпрограмм MapReduce и форматировщиков
Parameters
-
Traversable$result Оригинальные результаты
Returns
Cake\Datasource\ResultSetInterface_decorateStatement() protected
_decorateStatement(Cake\Database\StatementInterface $statement): Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface
Вспомогательная функция, используемая для обертывания исходного оператора драйвера с помощью любых зарегистрированных обратных вызовов.
Parameters
-
Cake\Database\StatementInterface$statement для декорирования
Returns
Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface_decoratorClass() protected
_decoratorClass(): string
Возвращает имя класса, который будет использоваться для декорирования результатов
Returns
string_dirty() protected
_dirty(): void
Помечает запрос как измененный, удаляя любую предварительно обработанную информацию из кэша в памяти, например, предыдущие результаты
Returns
void_execute() protected
_execute(): Cake\Datasource\ResultSetInterface
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для загрузки связанных данных глубоких ассоциаций.
Returns
Cake\Datasource\ResultSetInterface_expressionsVisitor() protected
_expressionsVisitor(Cake\Database\ExpressionInterfaceCake\Database\ExpressionInterface[] $expression, Closure $callback): void
Метод обхода частей запроса, используемый traverseExpressions()
Parameters
-
Cake\Database\ExpressionInterfaceCake\Database\ExpressionInterface[]$expression Выражение запроса или массив выражений.
-
Closure$callback Обратный вызов, который будет выполнен для каждого ExpressionInterface, найденного в этом запросе.
Returns
void_makeJoin() protected
_makeJoin(string|string[] $table, string|arrayCake\Database\ExpressionInterface $conditions, string $type): array
Возвращает массив, который может быть передан в метод join, описывающий одно условие соединения
Parameters
-
string|string[]$table Таблица для соединения
-
string|arrayCake\Database\ExpressionInterface$conditions Условия для использования при соединении.
-
string$type тип соединения для использования
Returns
array_performCount() protected
_performCount(): int
Выполняет и возвращает COUNT(*) для запроса.
Returns
int_transformQuery() protected
_transformQuery(): void
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет соединения, необходимые для загрузки связанных данных ассоциаций, определенных с помощью contain
Он также устанавливает типы по умолчанию для столбцов в предложении select
Returns
voidSee Also
addDefaultTypes() public
addDefaultTypes(Cake\ORM\Table $table): $this
Подсказывает этому объекту связать правильные типы при приведении типов условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователем самого себя при указании условий.
Этот метод возвращает тот же объект запроса для цепочки вызовов.
Parameters
-
Cake\ORM\Table$table Таблица, из которой нужно извлечь типы
Returns
$thisaliasField() public
aliasField(string $field, string|null $alias = null): array
Возвращает массив ключ => значение, представляющий одно поле с псевдонимом, которое может быть передано непосредственно в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
Если поле уже имеет псевдоним, оно не будет изменено. Если не передан $alias, будет использована таблица по умолчанию для этого запроса.
Parameters
-
string$field Поле для псевдонима
-
string|null$alias optional псевдоним, используемый для префикса поля
Returns
arrayaliasFields() public
aliasFields(array $fields, string|null $defaultAlias = null): string[]
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в одном массиве.
Параметры
-
array$fields Поля для алиасирования
-
string|null$defaultAlias optional Умолчательный алиас
Возвращает
string[]all() public
all(): Cake\Datasource\ResultSetInterface
Получить результаты для этого запроса.
Возвращает либо набор результатов, заданный с помощью setResult(), либо выполняет этот запрос и возвращает объект ResultSetDecorator, готовый для потоковой передачи результатов.
ResultSetDecorator — это итерируемый объект, реализующий методы, найденные в Cake\Collection\Collection.
Возвращает
Cake\Datasource\ResultSetInterfaceИсключения
RuntimeExceptionесли этот метод вызывается для запроса, не являющегося select.
andHaving() public
andHaving(string|arrayCake\Database\ExpressionInterfaceClosure $conditions, array $types = []): $this
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в фрагменте HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не проверяются на безопасность в конструкторе запроса.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure$conditions Условия AND для HAVING.
-
array$types optional ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$thisСм. также
andWhere() public @method
andWhere(string|arrayCake\Database\ExpressionInterfaceClosure $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)
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure$conditions -
array$types optional
Возвращает
$thisappend() public @method
append(arrayTraversable $items): Cake\Collection\CollectionInterface
Добавляет дополнительные строки к результату запроса.
Параметры
-
arrayTraversable$items
Возвращает
Cake\Collection\CollectionInterfaceapplyOptions() public
applyOptions(array $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$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 optional имя сопоставленного типа, используемое для преобразования при отправке в базу данных
Возвращает
$thiscache() public
cache(Closure|string|false $key, stringPsr\SimpleCache\CacheInterface $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 Ключ кеша или функция для генерации ключа кеша. При использовании функции экземпляр этого запроса будет передан в качестве аргумента.
-
stringPsr\SimpleCache\CacheInterface$config optional Имя конфигурации кеша для использования или экземпляр конфигурации кеша.
Возвращает
$thisИсключения
RuntimeExceptionКогда вы пытаетесь кэшировать запрос, не являющийся select.
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: boolean
- 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 опционально
Возвращает
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 опционально Билдер запроса для ассоциации, или если associations — массив, булево значение, определяющее, нужно ли перезаписать предыдущий список переданным списком. По умолчанию предыдущий список сливается с новым.
Возвращает
$thiscount() public
count(): int
Возвращает общее количество результатов для запроса.
Возвращает COUNT(*) для запроса. Если запрос не был изменён и счёт уже выполнен, возвращается кэшированное значение.
Возвращает
intcountBy() public @method
countBy(string|callable $field): Cake\Collection\CollectionInterface
Возвращает количество уникальных значений для столбца.
Параметры
-
string|callable$field
Возвращает
Cake\Collection\CollectionInterfacecounter() public
counter(callable|null $counter): $this
Регистрирует вызываемую функцию, которая будет выполнена при вызове метода count в этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение метода count.
Это особенно полезно, когда необходимо оптимизировать запрос для возврата подсчёта, например, удаляя необоснованные соединения, удаляя группировку или просто возвращая приблизительное число строк.
Обратный вызов получит в качестве первого аргумента клон этого запроса, а не сам запрос.
Если первый параметр имеет значение null, вместо этого вызывается встроенная функция подсчёта.
Параметры
-
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 опционально Указывает, следует ли добавлять или заменять все существующие декораторы.
Возвращает
$thisdelete() public
delete(string|null $table = null): $this
Создаёт запрос на удаление.
Изменяет тип запроса на 'delete'. Может быть объединён с методом where() для создания запросов на удаление.
Параметры
-
string|null$table опционально Неиспользуемый параметр.
Возвращает
$thisdisableAutoFields() public
disableAutoFields(): $this
Отключает автоматическое добавление полей.
Возвращает
$thisdisableBufferedResults() public
disableBufferedResults(): $this
Отключает буферизацию результатов.
Отключение буферизации уменьшит потребление памяти, поскольку извлечённые результаты не запоминаются для будущих итераций.
Возвращает
$thisdisableHydration() public
disableHydration(): $this
Отключает гидратацию сущностей.
Отключение гидратации приведёт к возврату массива результатов для запроса вместо сущностей.
Возвращает
$thisdisableResultsCasting() public
disableResultsCasting(): $this
Отключает преобразование результатов.
При отключении поля будут возвращены как полученные из драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может повысить производительность с большими наборами данных.
Возвращает
$thisdistinct() public
distinct(arrayCake\Database\ExpressionInterface|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); Параметры
-
arrayCake\Database\ExpressionInterface|string|bool$on опционально Включить/выключить distinct класс или список полей для фильтрации.
-
bool$overwrite опционально Необходимо ли сбросить поля переданным списком или нет
Возвращает
$thiseach() public @method
each(callable $c): Cake\Collection\CollectionInterface
Передаёт каждый из результатов запроса вызываемой функции.
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfaceeagerLoaded() public
eagerLoaded(bool $value): $this
Устанавливает экземпляр запроса как запрос с ленивой загрузкой. Если не указан аргумент, возвращается текущее значение параметра eager loading запроса _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(stringCake\Database\ExpressionInterface|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 и не подходит для использования с данными, предоставленными пользователем.
Параметры
-
stringCake\Database\ExpressionInterface|null$expression optional Выражение, которое нужно добавить
Возвращает
$thisevery() public @method
every(callable $c): bool
Возвращает true, если все результаты проходят проверку вызываемой функции
Параметры
-
callable$c
Возвращает
boolexecute() public
execute(): Cake\Database\StatementInterface
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключения, настроенного для этой цели. Возвращает объект результирующего оператора.
Выполнение запроса включает несколько внутренних шагов. Сначала происходит преобразование этого объекта в соответствии с диалектом подключения. Это может привести к созданию нового объекта Query, который будет фактически выполнен. Непосредственно после этого, буквальные значения передаются подключению, чтобы безопасно связать их с запросом. Наконец, результирующий оператор украшается пользовательскими объектами для выполнения обратных вызовов для каждой полученной строки при необходимости.
Результат - это итерируемый объект, поэтому его можно использовать в любом цикле, как массив.
Этот метод может быть переопределен в подклассах запроса, чтобы украсить поведение вокруг выполнения запроса.
Возвращает
Cake\Database\StatementInterfaceextract() 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 $options = []): static
Применение пользовательских методов поиска к существующему объекту запроса.
Позволяет объединять и применять друг к другу пользовательские методы поиска.
$repository->find('all')->find('recent'); Вышеприведенный пример демонстрирует наложение нескольких методов поиска на один запрос.
Параметры
-
string$finder Метод поиска, который необходимо использовать.
-
array$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|true $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|true$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
Получает типы по умолчанию для текущей карты типов.
Возвращает
arraygetEagerLoader() 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(): callable[]
Возвращает список ранее зарегистрированных процедур форматирования.
Возвращает
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(arrayCake\Database\ExpressionInterface|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'); Поля группировки не подходят для использования с данными от пользователя, так как они не проверяются на безопасность в создателе запроса.
Параметры
-
arrayCake\Database\ExpressionInterface|string$fields Поля, которые нужно добавить в список.
-
bool$overwrite optional устанавливает, нужно ли сбрасывать поля переданным списком или нет
Возвращает
$thisgroupBy() public @method
groupBy(string|callable $field): Cake\Collection\CollectionInterface
Группировка всех результатов в памяти по значению столбца.
Параметры
-
string|callable$field
Возвращает
Cake\Collection\CollectionInterfacehaving() public
having(string|arrayCake\Database\ExpressionInterfaceClosure|null $conditions = null, array $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использованы в операторе HAVING для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными от пользователя, так как они не проверяются на безопасность в создателе запроса.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$conditions optional Условия HAVING.
-
array$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(string|callable $callback): Cake\Collection\CollectionInterface
Возвращает результаты, индексированные по значению столбца.
Параметры
-
string|callable$callback
Возвращает
Cake\Collection\CollectionInterfaceinnerJoin() public
innerJoin(string|array $table, string|arrayCake\Database\ExpressionInterface $conditions = [], array $types = []): $this
Добавляет в запрос оператор INNER JOIN.
Это метод сокращения для создания объединений через join().
Аргументы этого метода идентичны сокращению leftJoin(), обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
string|array$table Таблица для объединения.
-
string|arrayCake\Database\ExpressionInterface$conditions optional Условия для объединения.
-
array$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisinnerJoinWith() public
innerJoinWith(string $assoc, callable|null $builder = null): $this
Создаёт внутреннее соединение с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и пользовательские условия, изначально заданные для неё.
Эта функция добавит записи в граф 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, string[] $types = []): $this
Создать запрос вставки.
Это изменяет тип запроса на 'insert'. Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values()
Можно комбинировать с методом where() для создания запросов удаления.
Параметры
-
array$columns Столбцы для вставки.
-
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 $tables, array $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$tables Список таблиц для объединения в запросе.
-
array$types optional Ассоциативный массив имен типов, используемых для привязки значений к запросу.
-
bool$overwrite optional Нужно ли перезаписать объединения переданным списком или нет.
Возвращает
$thisСм. также
jsonSerialize() public
jsonSerialize(): Cake\Datasource\ResultSetInterface
Выполняет запрос и преобразует набор результатов в JSON.
Часть интерфейса JsonSerializable.
Возвращает
Cake\Datasource\ResultSetInterfacelast() public @method
last(): mixed
Возвращает последнюю строку результата запроса.
Возвращает
mixedleftJoin() public
leftJoin(string|string[] $table, string|arrayCake\Database\ExpressionInterface $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() для получения дополнительной информации о условиях и типах.
Параметры
-
string|string[]$table Таблица для объединения.
-
string|arrayCake\Database\ExpressionInterface$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 optional Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей.
Возвращает
$thislimit() public
limit(intCake\Database\ExpressionInterface|null $num): $this
Устанавливает количество записей, которые должны быть получены из базы данных. Принимает целое число или объект выражения, оцениваемый как целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
-
intCake\Database\ExpressionInterface|null$num Количество записей для возврата.
Возвращает
$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 для выполнения над результатами базы данных. Как вызываемый объект map, так и вызываемый объект caller должны быть вызываемыми объектами.
Маршрутизация MapReduce будет выполняться только при выполнении запроса и при первой попытке извлечения результата.
Если третий аргумент установлен в true, предыдущие map-reducers будут удалены и заменены переданными аргументами.
Параметры
-
callable|null$mapper необязательный Вызываемый объект map.
-
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(arrayCake\Database\ExpressionInterface|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 Параметры
-
arrayCake\Database\ExpressionInterface|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(string|arrayCake\Database\ExpressionInterface|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
Вы можете необязательно передать строку SQL в сыром виде или массив или выражения в любом формате, поддерживаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
string|arrayCake\Database\ExpressionInterface|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(intCake\Database\ExpressionInterface|null $num): $this
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничного отображения больших результатов. Принимает целое число или объект выражения, оцениваемый как целое число.
В некоторых базах данных эта операция может быть не поддерживаема или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
-
intCake\Database\ExpressionInterface|null$num Количество записей, которые необходимо пропустить.
Возвращает
$thisorder() public
order(arrayCake\Database\ExpressionInterfaceClosure|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей, которые будут использоваться в условии ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передан массив, ключи будут использоваться как само поле, а значение будет представлять порядок, в котором это поле должно быть упорядочено. Когда вы вызываете функцию несколько раз с теми же полями в качестве ключа, последнее определение порядка будет иметь приоритет над другими.
По умолчанию эта функция будет добавлять любой переданный аргумент в список полей для выбора, если второй аргумент не установлен в true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Производит:
ORDER BY title DESC, author_id ASC
$query
->order(['title' => $query->newExpr('DESC NULLS FIRST')])
->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
Превратится в:
ORDER BY (id %2 = 0), title ASC
Если вам необходимо установить сложные выражения в качестве условий порядка, вы должны использовать orderAsc() или orderDesc().
Параметры
-
arrayCake\Database\ExpressionInterfaceClosure|string$fields Поля, которые необходимо добавить в список.
-
bool$overwrite необязательный Нужно ли сбрасывать порядок с помощью списка полей или нет.
Возвращает
$thisorderAsc() public
orderAsc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this
Добавляет условие ORDER BY со значением ASC.
Этот метод позволяет устанавливать сложные выражения в качестве условий сортировки в отличие от order().
Поля сортировки не подходят для использования с данными, предоставленными пользователем, так как они не проверяются на безопасность в билдере запросов.
Параметры
-
stringCake\Database\Expression\QueryExpressionClosure$field Поле, по которому нужно отсортировать.
-
bool$overwrite необязательный Нужно ли сбрасывать условия сортировки.
Возвращает
$thisorderDesc() public
orderDesc(stringCake\Database\Expression\QueryExpressionClosure $field, bool $overwrite = false): $this
Добавить в предложение ORDER BY условие DESC.
В отличие от метода order(), этот метод позволяет задавать сложные выражения в качестве условий сортировки.
Поле сортировки не подходит для использования с данными, введёнными пользователем, так как они не очищаются конструктором запроса.
Параметры
-
stringCake\Database\Expression\QueryExpressionClosure$field Поле для сортировки.
-
bool$overwrite необязательный Указывает, следует ли сбросить условия сортировки.
Возвращает
$thispage() public
page(int $num, int|null $limit = null): $this
Устанавливает страницу результатов, которую вы хотите получить.
Этот метод предоставляет более удобный интерфейс для установки лимита и смещения в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, лимит по умолчанию будет равен существующему условию лимита, а если и он пуст, то 25 будет использован.
Номера страниц должны начинаться с 1.
Параметры
-
int$num Номер страницы, которую вы хотите получить.
-
int|null$limit необязательный Количество строк, которые вы хотите получить на странице. Если null, будет использовано текущее условие лимита.
Возвращает
$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(string|string[] $table, string|arrayCake\Database\ExpressionInterface $conditions = [], array $types = []): $this
Добавляет отдельное RIGHT JOIN предложение в запрос.
Это метод сокращённой записи для построения объединений с помощью join().
Аргументы этого метода идентичны аргументам leftJoin() сокращённой записи. Подробную информацию см. в описании этого метода.
Параметры
-
string|string[]$table Таблица для объединения.
-
string|arrayCake\Database\ExpressionInterface$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(arrayCake\Database\ExpressionInterface|string|callable $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.
Параметры
-
arrayCake\Database\ExpressionInterface|string|callable$fields необязательный Поля, которые нужно добавить в список.
-
bool$overwrite необязательный Указывает, нужно ли перезаписать поля переданным списком или нет
Возвращает
$thisselectAllExcept() public
selectAllExcept(Cake\ORM\TableCake\ORM\Association $table, string[] $excludedFields, bool $overwrite = false): $this
Все поля, связанные с переданной таблицей, кроме исключённых, будут добавлены в предложение select запроса. Переданные поля исключения не должны иметь псевдонимов. После первого вызова этого метода, второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте в качестве третьего аргумента true, что сбросит предложение select, удалив все предыдущие добавления.
Параметры
-
Cake\ORM\TableCake\ORM\Association$table Таблица для получения массива столбцов.
-
string[]$excludedFields Имена столбцов без псевдонимов, которые не должны быть выбраны из $table.
-
bool$overwrite необязательный Указывает, нужно ли сбросить/удалить ранее выбранные поля.
Возвращает
$thisИсключение
InvalidArgumentExceptionЕсли Association|Table не передан в качестве первого аргумента
set() public
set(string|arrayClosureCake\Database\Expression\QueryExpression $key, mixed $value = null, array|string $types = []): $this
Устанавливает одно или несколько полей для обновления.
Примеры
Передача строки:
$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');
}); Параметры
-
string|arrayClosureCake\Database\Expression\QueryExpression$key -
Имя столбца или массив ключей
- значения для установки. Это также может быть QueryExpression, содержащий SQL-фрагмент. Это также может быть замыкание, которое должно вернуть объект выражения.
-
mixed$value необязательный Значение для обновления $key. Может быть null, если $key представляет собой массив или QueryExpression. Когда $key представляет собой массив, этот параметр будет использован как $types.
-
array|string$types необязательный Типы столбцов, с которыми обрабатываются данные.
Возвращает
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Параметры
-
Cake\Database\Connection$connection Экземпляр подключения.
Возвращает
$thissetDefaultTypes() public
setDefaultTypes(array $types): $this
Переопределить соответствия типов по умолчанию для полей в реализуемом объекте.
Этот метод полезен, если вам нужно установить соответствия типов, которые используются во множестве функций/выражений в запросе.
Для добавления значения по умолчанию без перезаписи существующих, используйте getTypeMap()->addDefaults()
Параметры
-
array$types Массив типов для установки.
Возвращает
$thisСм. также
setEagerLoader() public
setEagerLoader(Cake\ORM\EagerLoader $instance): $this
Устанавливает экземпляр класса загрузчика eager для загрузки ассоциаций и хранения содержаний.
Параметры
-
Cake\ORM\EagerLoader$instance Загрузчик eager для использования.
Возвращает
$thissetResult() public
setResult(iterable $results): $this
Устанавливает набор результатов для запроса.
Установка набора результатов запроса сделает execute() бездействующим. Вместо выполнения SQL-запроса и извлечения результатов, будет возвращен ResultSet, предоставленный этому методу.
Этот метод наиболее полезен при совместном использовании с результатами, хранящимися в кэше с постоянным хранением.
Параметры
-
iterable$results Результаты, которые должен вернуть этот запрос.
Возвращает
$thissetSelectTypeMap() public
setSelectTypeMap(Cake\Database\TypeMap $typeMap): $this
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
Параметры
-
Cake\Database\TypeMap$typeMap Объект карты для использования
Возвращает
$thissetTypeMap() public
setTypeMap(arrayCake\Database\TypeMap $typeMap): $this
Создаёт новый TypeMap, если $typeMap — массив, иначе меняет его на предоставленный.
Параметры
-
arrayCake\Database\TypeMap$typeMap Создаёт TypeMap, если массив, иначе устанавливает предоставленный TypeMap
Возвращает
$thissetValueBinder() public
setValueBinder(Cake\Database\ValueBinder|null $binder): $this
Перезаписывает текущий связующий элемент значений
ValueBinder отвечает за создание заглушек запроса и временное связывание значений с этими заглушками, чтобы они могли быть правильно переданы объекту оператора.
Параметры
-
Cake\Database\ValueBinder|null$binder Связующий элемент или null для отключения связывания.
Возвращает
$thisshuffle() public @method
shuffle(): Cake\Collection\CollectionInterface
Перемешивает порядок возвращаемых результатов в памяти.
Возвращает
Cake\Collection\CollectionInterfaceskip() public @method
skip(int $howMany): Cake\Collection\CollectionInterface
Пропускает определенное количество строк в начале результата запроса.
Параметры
-
int$howMany
Возвращает
Cake\Collection\CollectionInterfacesome() public @method
some(callable $c): bool
Возвращает true, если хотя бы один из результатов проходит проверку с помощью вызываемого объекта.
Параметры
-
callable$c
Возвращает
boolsortBy() public @method
sortBy(mixed $callback, int $dir): Cake\Collection\CollectionInterface
Сортирует запрос с помощью обратного вызова.
Параметры
- $callback
-
int$dir
Возвращает
Cake\Collection\CollectionInterfacesql() public
sql(Cake\Database\ValueBinder|null $binder = null): string
Возвращает SQL-представление этого объекта.
Эта функция компилирует этот запрос, чтобы сделать его совместимым с SQL-диалектом, используемым подключением. Этот процесс может добавлять, удалять или изменять любую часть запроса или внутреннее выражение, чтобы сделать его исполняемым в целевой платформе.
Полученный запрос может содержать заглушки, которые будут заменены фактическими значениями при выполнении запроса, поэтому он наиболее подходит для использования с подготовленными операторами.
Параметры
-
Cake\Database\ValueBinder|null$binder optional
Возвращает
stringstopWhen() public @method
stopWhen(callable $c): Cake\Collection\CollectionInterface
Возвращает каждую строку до тех пор, пока вызываемый объект не вернёт true.
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfacesubquery() public static
subquery(Cake\ORM\Table $table): static
Возвращает новый запрос, у которого отключено автоматическое алиасирование полей.
Параметры
-
Cake\ORM\Table$table Таблица, на которой начинается этот запрос.
Возвращает
staticsumOf() public @method
sumOf(string|callable $field): float
Возвращает сумму всех значений для одного столбца.
Параметры
-
string|callable$field
Возвращает
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, string[] $parts): $this
Будет перебирать предоставленные части.
Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Этот метод может использоваться для обхода подмножества частей запроса для рендеринга SQL-запроса.
Обратный вызов получит 2 параметра: первый — значение части запроса, по которой итерируется, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
-
callable$visitor Функция или вызываемый объект, которые будут выполняться для каждой части
-
string[]$parts Список частей запроса для обхода
Возвращает
$thistriggerBeforeFind() public
triggerBeforeFind(): void
Вызывает событие beforeFind на объекте репозитория запроса.
Будет вызван не более одного раза и только для запросов выбора.
Возвращает
voidtype() public
type(): string
Возвращает тип этого запроса (выбор, вставка, обновление, удаление)
Возвращает
stringunion() public
union(stringCake\Database\Query $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
Параметры
-
stringCake\Database\Query$query полный SQL-запрос, который будет использоваться в операторе UNION
-
bool$overwrite необязательно следует ли сбросить список запросов, которые необходимо обработать или нет
Возвращает
$thisunionAll() public
unionAll(stringCake\Database\Query $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
Параметры
-
stringCake\Database\Query$query полный SQL-запрос, который будет использоваться в операторе UNION
-
bool$overwrite необязательно следует ли сбросить список запросов, которые необходимо обработать или нет
Возвращает
$thisupdate() public
update(stringCake\Database\ExpressionInterface $table = null): $this
Создает запрос на обновление.
Изменяет тип запроса на 'update'. Может быть объединён с методами set() и where() для создания запросов на обновление.
Параметры
-
stringCake\Database\ExpressionInterface$table необязательно Неиспользуемый параметр.
Возвращает
$thisvalues() public
values(arrayCake\Database\QueryCake\Database\Expression\ValuesExpression $data): $this
Устанавливает значения для запроса вставки.
Многократные вставки могут быть выполнены, вызывая values() более одного раза или предоставив массив наборов значений. Кроме того, $data может быть экземпляром Query для вставки данных из другого запроса SELECT.
Параметры
-
arrayCake\Database\QueryCake\Database\Expression\ValuesExpression$data Данные для вставки.
Возвращает
$thisИсключения
Cake\Database\Exception\DatabaseExceptionесли вы попытаетесь установить значения до объявления столбцов. Или если вы попытаетесь установить значения для запросов, не являющихся запросами на вставку.
where() public
where(string|arrayCake\Database\ExpressionInterfaceClosure|null $conditions = null, array $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нем, значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждый элемент будет соединен со всеми остальными условиями с помощью оператора AND. Последовательные вызовы этой функции также будут объединять новые заданные условия с использованием оператора AND. Кроме того, значения могут быть выражены с помощью объектов выражений, которые могут включать другие объекты запросов.
Любые условия, созданные с помощью этого метода, могут использоваться с любым типом запросов SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример создаёт:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Допустимые типы могут быть использованы из сопоставленных с классом Database\Type.
Вложение условий с союзьными связями:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример создаёт:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия с союзами по своему усмотрению. Иногда вы можете захотеть определить 2 разных варианта для одного и того же ключа, в таком случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Помните, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он будет присоединять переданные условия к предыдущему хранящемуся списку с использованием оператора AND. Также, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не будет перезаписывать предыдущее значение.
Использование объектов выражений:
$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp); Предыдущий пример создаёт:
WHERE (id != 100 OR author_id != 1) AND published = 1
Другие объекты запроса могут использоваться в качестве условий для любого поля.
Добавление условий в несколько шагов:
Вы можете использовать вызываемые функции для построения сложных выражений. Функции принимают в качестве первого аргумента новый объект QueryExpression, а в качестве второго — этот экземпляр запроса. Функции должны возвращать объект выражения, который будет добавлен в список условий запроса с использованием оператора AND.
$query
->where(['title !=' => 'Hello World'])
->where(function ($exp, $query) {
$or = $exp->or(['id' => 1]);
$and = $exp->and(['id >' => 2, 'id <' => 10]);
return $or->add($and);
}); - Предыдущий пример создаёт:
WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))
Условия в виде строк:
$query->where(['articles.author_id = authors.id', 'modified IS NULL']);
Предыдущий пример создаёт:
WHERE articles.author_id = authors.id AND modified IS NULL
Обратите внимание, что при использовании нотации массива или объектов выражений все значения будут правильно заключены в кавычки и автоматически преобразованы в соответствующий тип данных базы данных, тем самым защищая ваше приложение от SQL-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Самое безопасное, что вы можете сделать, это никогда не использовать строковые условия.
Параметры
-
string|arrayCake\Database\ExpressionInterfaceClosure|null$conditions необязательно Условия для фильтрации.
-
array$types необязательно ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite необязательно следует ли перезаписать условия переданным списком или нет
Возвращает
$thiswhereInList() public
whereInList(string $field, array $values, array $options = []): $this
Добавляет условие IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые вводы в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки на корректность.
Параметры:
-
types- Ассоциативный массив имён типов, используемых для привязки значений к запросу -
allowEmpty- Разрешить пустой массив.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array$options необязательно Параметры
Возвращает
$thiswhereNotInList() public
whereNotInList(string $field, array $values, array $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые вводы в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки на корректность.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array$options необязательно Параметры
Возвращает
$thiswhereNotNull() public
whereNotNull(array|stringCake\Database\ExpressionInterface $fields): $this
Удобный метод, который добавляет условие NOT NULL к запросу
Параметры
-
array|stringCake\Database\ExpressionInterface$fields Одно поле или выражения или список из них, которые не должны быть null.
Возвращает
$thiswhereNull() public
whereNull(array|stringCake\Database\ExpressionInterface $fields): $this
Удобный метод, добавляющий условие IS NULL в запрос
Параметры
-
array|stringCake\Database\ExpressionInterface$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(ClosureCake\Database\Expression\CommonTableExpression $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);
}); Параметры
-
ClosureCake\Database\Expression\CommonTableExpression$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
Список частей запроса, которые необходимо пройти для генерации оператора DELETE.
Тип
string[]$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненный оператор.
Тип
bool$_eagerLoaded protected
Является ли запрос автономным или результатом операции eager load.
Тип
bool$_eagerLoader protected
Экземпляр класса, ответственного за хранение содержаний ассоциаций и их eager загрузку при выполнении этого запроса.
Тип
Cake\ORM\EagerLoader|null$_formatters protected
Список классов форматирования или обратных вызовов, которые будут обрабатывать результаты после их извлечения.
Тип
callable[]$_functionsBuilder protected
Экземпляр объекта функции, используемого для генерации произвольных SQL функций.
Тип
Cake\Database\FunctionsBuilder|null$_hasFields protected
Выбрал ли пользователь какие-либо поля до выполнения. Это используется для определения, должны ли быть автоматически выбраны какие-либо поля.
Тип
bool|null$_hydrate protected
Необходимо ли гидратировать результаты в объекты сущностей.
Тип
bool$_insertParts protected
Список частей запроса, которые необходимо пройти для генерации оператора INSERT.
Тип
string[]$_iterator protected
Объект оператора, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_mapReduce protected
Список операций map-reduce, которые должны быть применены к результатам запроса.
Тип
array$_options protected
Содержит любые пользовательские параметры, переданные с помощью applyOptions, которые не могли быть обработаны никаким методом в этом классе.
Тип
array$_parts protected
Список SQL частей, которые будут использованы для построения этого запроса.
Тип
array$_repository public @property
Экземпляр объекта таблицы, к которому привязан этот запрос.
Тип
Cake\ORM\Table$_resultDecorators protected
Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результата оператора при получении. Каждая функция обратного вызова получит массив строк в качестве первого аргумента.
Тип
callable[]$_results protected
Объект ResultSet.
При установлении выполнение запроса будет пропущено.
Тип
iterable|null$_resultsCount protected
Значение COUNT(*) для запроса.
При установлении выполнение подсчета будет пропущено.
Тип
int|null$_selectParts protected
Список частей запроса, которые необходимо пройти для генерации оператора SELECT.
Тип
string[]$_selectTypeMap protected
Карта типов для полей в операторе select.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (select, insert, update, delete).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected
Список частей запроса, которые необходимо пройти для генерации оператора UPDATE.
Тип
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.2/class-Cake.ORM.Query.html