Класс 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
array<string>Список положений запроса для обработки при генерации оператора DELETE.
- $_dirty protected
boolУказывает, были ли изменены внутренние данные этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненное утверждение.
- $_eagerLoaded protected
boolЯвляется ли запрос автономным или результатом операции eager load.
- $_eagerLoader protected
Cake\ORM\EagerLoader|nullЭкземпляр класса, отвечающего за хранение содержаний ассоциаций и их ленивую загрузку при выполнении запроса.
- $_formatters protected
array<callable>Список классов-форматеров или колбэков, которые будут пост-обрабатывать результаты при извлечении.
- $_functionsBuilder protected
Cake\Database\FunctionsBuilder|nullЭкземпляр объекта-генератора функций, используемый для создания произвольных SQL-функций.
- $_hasFields protected
bool|nullУказывает, выбрал ли пользователь какие-либо поля перед выполнением. Это используется для определения, следует ли автоматически выбирать какие-либо поля.
- $_hydrate protected
boolСледует ли гидратировать результаты в объекты сущностей.
- $_insertParts protected
array<string>Список фрагментов запроса, которые необходимо обработать для генерации оператора INSERT.
- $_iterator protected
Cake\Database\StatementInterface|nullОбъект оператора, полученный в результате выполнения этого запроса.
- $_mapReduce protected
arrayСписок процедур map-reduce, которые должны быть применены к результату запроса.
- $_options protected
arrayСодержит любые пользовательские параметры, переданные с помощью applyOptions, которые не могли быть обработаны ни одним методом в этом классе.
- $_parts protected
array<string, mixed>Список SQL-частей, которые будут использоваться для построения этого запроса.
- $_repository public @property
Cake\ORM\TableЭкземпляр объекта таблицы, к которому привязан этот запрос.
- $_resultDecorators protected
array<callable>Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующего оператора при получении. Каждая функция обратного вызова будет принимать массив строк в качестве первого аргумента.
- $_results protected
iterable|nullОбъект ResultSet.
- $_resultsCount protected
int|nullЗначение COUNT(*) для запроса.
- $_selectParts protected
array<string>Список элементов запроса для обхода при генерации оператора SELECT.
- $_selectTypeMap protected
Cake\Database\TypeMap|nullКарта типов для полей в предложении SELECT.
- $_type protected
stringТип этого запроса (выборка, вставка, обновление, удаление).
- $_typeMap protected
Cake\Database\TypeMap|null - $_updateParts protected
array<string>Список элементов запроса для создания оператора UPDATE.
- $_useBufferedResults protected
boolЛогический флаг для отслеживания, включены ли буферизованные результаты.
- $_valueBinder protected
Cake\Database\ValueBinder|nullОбъект, ответственный за создание заглушек запроса и временное хранение значений, связанных с каждой из них.
- $aliasingEnabled protected
boolВключено ли создание псевдонимов для полей.
- $typeCastEnabled protected
boolФлаг отслеживания для отключения преобразования типов.
Краткое описание методов
-
__call() public
Позволяет вызывать методы из набора результатов, как будто они принадлежат этому классу
-
__clone() public
Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.
-
__construct() public
Конструктор
-
__debugInfo() public
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
-
__toString() public
Возвращает строковое представление этого запроса (полное SQL-выражение).
-
_addAssociationsToTypeMap() protected
Используется для рекурсивного добавления типов столбцов ассоциаций, содержащихся в запросе.
-
_addDefaultFields() protected
Проверяет, есть ли установленные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
-
_addDefaultSelectTypes() protected
Устанавливает типы по умолчанию для преобразования полей в части select.
-
_conjugate() protected
Вспомогательная функция, используемая для построения условий путем составления объектов QueryExpression.
-
_decorateResults() protected
Декорирует итератор результатов с помощью MapReduce-процедур и форматеров.
-
_decorateStatement() protected
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.
-
_decoratorClass() protected
Возвращает имя класса, используемого для декорирования результатов.
-
_dirty() protected
Помечает запрос как грязный, удаляя любую предварительно обработанную информацию из кэша в памяти, такой как предыдущие результаты.
-
_execute() protected
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для отложенной загрузки глубоких ассоциаций.
-
_expressionsVisitor() protected
Метод обхода частей запроса, используемый методом traverseExpressions()
-
_makeJoin() protected
Возвращает массив, который можно передать методу join, описывая одну отдельную инструкцию объединения.
-
_performCount() protected
Выполняет и возвращает COUNT(*) для запроса.
-
_transformQuery() protected
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
-
addDefaultTypes() public
Подсказывает этому объекту ассоциировать правильные типы при приведении типов условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователя при указании условий.
-
aliasField() public
Возвращает массив ключ => значение, представляющий одно алиасированное поле, которое можно передать непосредственно в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
-
aliasFields() public
Выполняет
aliasField()для каждого поля в предоставленном списке и возвращает результат в одном массиве. -
all() public
Получение результатов для этого запроса.
-
andHaving() public
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в предложении HAVING. Этот метод работает точно так же, как метод
andWhere(). Обратитесь к его документации за информацией о том, как использовать каждый параметр. -
andWhere() public @method
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND. {@see \Cake\Database\Query::andWhere()}
-
append() public @method
Добавляет дополнительные строки к результату запроса.
-
applyOptions() public
Заполняет или добавляет части к текущим условиям запроса с помощью массива. Это удобно для передачи всех условий запроса сразу.
-
bind() public
Связывает заполнитель запроса со значением и типом.
-
cache() public
Включить кэширование результатов для этого запроса.
-
chunk() public @method
Группирует результаты в массивы по $size строк каждый.
-
clause() public
Возвращает любые данные, хранящиеся в указанном фрагменте. Это полезно для изменения любой внутренней части запроса, и оно используется диалектами SQL для преобразования запроса перед его выполнением. Допустимые фрагменты, которые можно получить, это: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
-
cleanCopy() public
Создает копию текущего запроса, срабатывает передFind и сбрасывает некоторые состояния.
-
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модификаторов, которые будут использоваться в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
Все поля, связанные с переданной таблицей, кроме исключённых полей, будут добавлены в оператор выборки запроса. Переданные исключённые поля не должны быть алиасами. После первого вызова этого метода второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос первым. Если вам нужно изменить список после первого вызова, передайте булево значение overwrite со значением true, что сбросит оператор выборки, удалив все предыдущие добавления.
-
set() public
Устанавливает одно или несколько полей для обновления.
-
setConnection() public
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
-
setDefaultTypes() public
Перезаписывает сопоставления типов по умолчанию для полей в объекте-реализации.
-
setEagerLoader() public
Устанавливает экземпляр класса загрузчика с отложенной загрузкой для загрузки ассоциаций и хранения содержаний.
-
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 для этого запроса.
-
whereNotInListOrNull() public
Добавляет условие NOT IN или набор условий, которые будут использоваться в операторе WHERE для этого запроса. Это также позволяет полю быть пустым с условием IS NULL, так как значение NULL заставит условие NOT IN всегда завершаться неудачей.
-
whereNotNull() public
Удобный метод, добавляющий условие NOT NULL в запрос
-
whereNull() public
Удобный метод, добавляющий условие IS NULL в запрос
-
window() public
Добавляет именованное выражение окна.
-
with() public
Добавляет новое общее табличное выражение (CTE) в запрос.
-
zip() public @method
Возвращает первый результат и из запроса, и из $c в массиве, затем второй результат и так далее.
-
zipWith() public @method
Возвращает каждый из результатов вызова $c с первыми строками запроса и каждым из элементов, затем со вторыми строками и так далее.
Подробное описание методов
__call() public
__call(string $method, array $arguments): mixed
Позволяет вызывать методы из набора результатов так, как будто они принадлежат этому классу
Параметры
-
string$method вызываемый метод
-
array$arguments список аргументов для вызываемого метода
Возвращает
mixedИсключения
BadMethodCallExceptionесли метод вызывается для запроса, не являющегося запросом выбора
__clone() public
__clone(): void
Обрабатывает очистку итератора и клонирование всех выражений и связывателей значений.
Обрабатывает клонирование загружаемых данных.
Возвращает
void__construct() public
__construct(Cake\Database\Connection $connection, Cake\ORM\Table $table)
Конструктор
Параметры
-
Cake\Database\Connection$connection Объект соединения
-
Cake\ORM\Table$table Таблица, на которой начинается этот запрос
__debugInfo() public
__debugInfo(): array<string, mixed>
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
Возвращает
array<string, mixed>__toString() public
__toString(): string
Возвращает строковое представление этого запроса (полное SQL-определение).
Возвращает
string_addAssociationsToTypeMap() protected
_addAssociationsToTypeMap(Cake\ORM\Table $table, Cake\Database\TypeMap $typeMap, array<string, array> $associations): void
Используется для рекурсивного добавления типов столбцов связанных ассоциаций в запрос.
Параметры
-
Cake\ORM\Table$table Экземпляр таблицы для извлечения ассоциаций.
-
Cake\Database\TypeMap$typeMap Карта типов для проверки столбцов. Эта карта типов косвенно изменяется через {@link \Cake\ORM\Query::addDefaultTypes()}
-
array<string, array>$associations Вложенное дерево ассоциаций для обхода.
Возвращает
void_addDefaultFields() protected
_addDefaultFields(): void
Проверяет, есть ли установленные поля для выбора, в противном случае добавляет все поля для таблицы по умолчанию.
Возвращает
void_addDefaultSelectTypes() protected
_addDefaultSelectTypes(): void
Устанавливает типы по умолчанию для преобразования полей в предложении SELECT
Возвращает
void_conjugate() protected
_conjugate(string $part, Cake\Database\ExpressionInterfaceClosure|array|string|null $append, string $conjunction, array<string, string> $types): void
Вспомогательная функция, используемая для построения условий путём составления объектов QueryExpression.
Параметры
-
string$part Имя части запроса, к которой нужно добавить новую часть
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$append Выражение или функция-строитель для добавления.
-
string$conjunction Тип союза, используемого для обработки части
-
array<string, string>$types Ассоциативный массив имён типов, используемых для привязки значений к запросу
Возвращает
void_decorateResults() protected
_decorateResults(Traversable $result): Cake\Datasource\ResultSetInterface
Декорирует итератор результатов с помощью процедур MapReduce и форматировщиков
Параметры
-
Traversable$result Исходные результаты
Возвращает
Cake\Datasource\ResultSetInterface_decorateStatement() protected
_decorateStatement(Cake\Database\StatementInterface $statement): Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.
Параметры
-
Cake\Database\StatementInterface$statement для декорирования
Возвращает
Cake\Database\Statement\CallbackStatementCake\Database\StatementInterface_decoratorClass() protected
_decoratorClass(): string
Возвращает имя класса, используемого для декорирования результатов
Возвращает
string_dirty() protected
_dirty(): void
Помечает запрос как грязный, удаляя любую предварительно обработанную информацию из кэша в памяти, такой как предыдущие результаты
Возвращает
void_execute() protected
_execute(): Cake\Datasource\ResultSetInterface
Выполняет этот запрос и возвращает объект ResultSet, содержащий результаты. Это также настроит правильный класс оператора для жадной загрузки глубоких ассоциаций.
Возвращает
Cake\Datasource\ResultSetInterface_expressionsVisitor() protected
_expressionsVisitor(Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface> $expression, Closure $callback): void
Метод обхода частей запроса, используемый методом traverseExpressions()
Параметры
-
Cake\Database\ExpressionInterface|arrayCake\Database\ExpressionInterface>$expression Выражение запроса или массив выражений.
-
Closure$callback Обратный вызов, который будет выполнен для каждого найденного выражения ExpressionInterface в этом запросе.
Возвращает
void_makeJoin() protected
_makeJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions, string $type): array
Возвращает массив, который может быть передан методу join, описывая одну клаузу join.
Параметры
-
array<string, mixed>|string$table Таблица, с которой следует выполнить join.
-
Cake\Database\ExpressionInterface|array|string$conditions Условия, используемые для объединения.
-
string$type Тип объединения, который следует использовать.
Возвращает
array_performCount() protected
_performCount(): int
Выполняет и возвращает COUNT(*) для запроса.
Возвращает
int_transformQuery() protected
_transformQuery(): void
Применяет некоторые значения по умолчанию к объекту запроса перед его выполнением.
В частности, добавляет предложение FROM, добавляет поля таблицы по умолчанию, если они не указаны, и применяет необходимые объединения для ленизой загрузки ассоциаций, определенных с использованием contain
Также устанавливает типы по умолчанию для столбцов в предложении select.
Возвращает
voidСм. также
addDefaultTypes() public
addDefaultTypes(Cake\ORM\Table $table): $this
Подсказывает этому объекту сопоставить правильные типы при приведении условий для базы данных. Это делается путем извлечения типов полей из схемы, связанной с переданным объектом таблицы. Это предотвращает повторение пользователя при указании условий.
Этот метод возвращает тот же объект запроса для цепочки.
Параметры
-
Cake\ORM\Table$table Таблица для извлечения типов
Возвращает
$thisaliasField() public
aliasField(string $field, string|null $alias = null): array
Возвращает массив ключ => значение, представляющий одно алиасовое поле, которое можно передать непосредственно в метод select(). Ключ будет содержать псевдоним, а значение — фактическое имя поля.
Если поле уже имеет псевдоним, то оно не будет изменено. Если $alias не передан, будет использоваться по умолчанию таблица для этого запроса.
Параметры
-
string$field Поле для присвоения псевдонима
-
string|null$alias optional Псевдоним, используемый для добавления префикса к полю
Возвращает
arrayaliasFields() public
aliasFields(array $fields, string|null $defaultAlias = null): array<string>
Выполняет aliasField() для каждого поля в предоставленном списке и возвращает результат в виде одного массива.
Параметры
-
array$fields Поля для присвоения псевдонимов
-
string|null$defaultAlias optional Псевдоним по умолчанию
Возвращает
array<string>all() public
all(): Cake\Datasource\ResultSetInterface
Получить результаты для этого запроса.
Возвращает либо набор результатов, заданный с помощью setResult(), либо выполняет запрос и возвращает объект ResultSetDecorator, готовый для потоковой передачи результатов.
ResultSetDecorator — это итерируемый объект, реализующий методы, найденные в Cake\Collection\Collection.
Возвращает
Cake\Datasource\ResultSetInterfaceИсключения
RuntimeExceptionесли этот метод вызывается для запроса, который не является select-запросом.
andHaving() public
andHaving(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): $this
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в условии HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, вводимыми пользователем, так как они не проверяются на безопасность средствами генератора запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions Условия AND для HAVING.
-
array<string, string>$types необязательно Ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$thisСм. также
andWhere() public @method
andWhere(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array $types = []): $this
Подключает любой ранее определённый набор условий к предоставленному списку, используя оператор AND. {@see \Cake\Database\Query::andWhere()}
Важно отметить, что при вызове этой функции любой ранее определённый набор условий для этого запроса будет обрабатываться как один аргумент для оператора AND. Эта функция будет действовать не только на последнее определённое условие, но и на все условия в целом.
При использовании массива для определения условий, создание ограничений для каждой записи массива будет использовать ту же логику, что и с функцией where(). Это означает, что каждая запись массива будет объединена с другой с помощью оператора AND, если вы не вложены условия в массив, используя другие операторы.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Результат:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Результат:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->or(['author_id' => 1])
->add(['author_id' => 2]);
}); Генерируются следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$conditions -
array$types необязательно
Возвращает
$thisappend() public @method
append(arrayTraversable $items): Cake\Collection\CollectionInterface
Добавляет дополнительные строки к результату запроса.
Параметры
-
arrayTraversable$items
Возвращает
Cake\Collection\CollectionInterfaceapplyOptions() public
applyOptions(array<string, mixed> $options): $this
Заполняет или добавляет части текущих пунктов запроса с помощью массива. Это удобно для передачи всех пунктов запроса сразу.
Метод принимает следующие параметры пунктов запроса:
- fields: Сопоставляется с методом select
- conditions: Сопоставляется с методом where
- limit: Сопоставляется с методом limit
- order: Сопоставляется с методом order
- offset: Сопоставляется с методом offset
- group: Сопоставляется с методом group
- having: Сопоставляется с методом having
- contain: Сопоставляется с параметрами contain для ленивой загрузки
- join: Сопоставляется с методом join
- page: Сопоставляется с методом page
Все остальные параметры не повлияют на запрос, но будут сохранены в качестве пользовательских параметров, которые можно прочитать с помощью getOptions(). Кроме того, они автоматически передаются в Model.beforeFind.
Пример:
$query->applyOptions([
'fields' => ['id', 'name'],
'conditions' => [
'created >=' => '2013-01-01'
],
'limit' => 10,
]); Эквивалентно:
$query ->select(['id', 'name']) ->where(['created >=' => '2013-01-01']) ->limit(10)
Пользовательские параметры можно прочитать с помощью getOptions():
$query->applyOptions([ 'fields' => ['id', 'name'], 'custom' => 'value', ]);
Здесь $options будет содержать ['custom' => 'value'] (параметр fields будет применён к запросу, а не сохранён, так как это параметр, связанный с пунктами запроса):
$options = $query->getOptions();
Параметры
-
array<string, mixed>$options Параметры, которые необходимо применить
Возвращает
$thisСм. также
bind() public
bind(string|int $param, mixed $value, string|int|null $type = null): $this
Связывает заполнитель запроса со значением и типом.
$query->bind(':id', 1, 'integer'); Параметры
-
string|int$param заполнитель, который будет заменён на цитированную версию $value
-
mixed$value Значение, которое нужно связать
-
string|int|null$type optional имя сопоставленного типа, используемое для преобразования при отправке в базу данных
Возвращает
$thiscache() public
cache(Closure|string|false $key, Psr\SimpleCache\CacheInterface|string $config = 'default'): $this
Включить кэширование результатов для этого запроса.
Если кэширование запроса включено, при его выполнении произойдет следующее:
- Проверить кэш по ключу $key. Если результаты есть, SQL не будет выполняться. Вместо этого будут возвращены кэшированные результаты.
- Если кэшированные данные устарели/отсутствуют, результирующий набор будет кэширован по мере выполнения запроса.
Использование
// Simple string key + config
$query->cache('my_key', 'db_results');
// Function to generate key.
$query->cache(function ($q) {
$key = serialize($q->clause('select'));
$key .= serialize($q->clause('where'));
return md5($key);
});
// Using a pre-built cache engine.
$query->cache('my_key', $engine);
// Disable caching
$query->cache(false); Параметры
-
Closure|string|false$key Ключ кэша или функция для генерации ключа кэша. При использовании функции, экземпляр этого запроса будет передан в качестве аргумента.
-
Psr\SimpleCache\CacheInterface|string$config 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
- containments
Этот метод создает клоны запросов, которые полезны при работе с подзапросами.
Возвращает
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 optional Строитель запроса для ассоциации, или если ассоциации - массив, логическое значение, указывающее, нужно ли переопределять предыдущий список переданным списком. По умолчанию используется слияние предыдущего списка с новым.
Возвращает
$thiscount() public
count(): int
Возвращает общее количество результатов запроса.
Возвращает COUNT(*) для запроса. Если запрос не был изменён, а подсчёт уже выполнен, возвращается кэшированное значение.
Возвращает
intcountBy() public @method
countBy(callable|string $field): Cake\Collection\CollectionInterface
Возвращает количество уникальных значений для столбца
Параметры
-
callable|string$field
Возвращает
Cake\Collection\CollectionInterfacecounter() public
counter(callable|null $counter): $this
Регистрирует вызываемую функцию, которая будет выполнена при вызове метода count в этом запросе. Возвращаемое значение функции будет установлено как возвращаемое значение метода count.
Это особенно полезно, когда необходимо оптимизировать запрос для возврата количества, например, удаляя ненужные соединения, удаляя группировку или просто возвращая приблизительное число строк.
Обратный вызов получит в качестве первого аргумента клон этого запроса, а не сам запрос.
Если первый параметр имеет значение 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 optional Указывает, следует ли добавить или заменить все существующие декораторы.
Возвращает
$thisdelete() public
delete(string|null $table = null): $this
Создаёт запрос на удаление.
Это изменяет тип запроса на 'delete'. Может быть объединён с методом where() для создания запросов на удаление.
Параметры
-
string|null$table optional Неиспользуемый параметр.
Возвращает
$thisdisableAutoFields() public
disableAutoFields(): $this
Отключает автоматическое добавление полей.
Возвращает
$thisdisableBufferedResults() public
disableBufferedResults(): $this
Отключает буферизацию результатов.
Отключение буферизации позволит экономить память, так как извлечённые результаты не будут запоминаться для будущих итераций.
Возвращает
$thisdisableHydration() public
disableHydration(): $this
Отключить гидрацию сущностей.
Отключение гидрации приведет к возврату массива результатов запроса вместо сущностей.
Возвращает
$thisdisableResultsCasting() public
disableResultsCasting(): $this
Отключает преобразование результатов.
При отключении поля будут возвращены в том формате, в котором они получены от драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.
Возвращает
$thisdistinct() public
distinct(Cake\Database\ExpressionInterface|array|string|bool $on = [], bool $overwrite = false): $this
Добавляет в запрос условие DISTINCT для удаления дубликатов из набора результатов. Это условие может использоваться только для операторов SELECT.
Если вы хотите отфильтровать дубликаты на основе строк, содержащих определённое поле или набор полей, вы можете передать массив полей для фильтрации. Имейте в виду, что эта опция может не поддерживаться во всех системах баз данных.
Примеры:
// Filters products with the same name and city
$query->select(['name', 'city'])->from('products')->distinct();
// Filters products in the same city
$query->distinct(['city']);
$query->distinct('city');
// Filter products with the same name
$query->distinct(['name'], true);
$query->distinct('name', true); Параметры
-
Cake\Database\ExpressionInterface|array|string|bool$on optional Включить/отключить режим distinct или список полей для фильтрации
-
bool$overwrite optional заменять ли поля переданным списком или нет
Возвращает
$thiseach() public @method
each(callable $c): Cake\Collection\CollectionInterface
Передает каждый результат запроса вызываемому объекту
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfaceeagerLoaded() public
eagerLoaded(bool $value): $this
Устанавливает экземпляр запроса как запрос с жадной загрузкой. Если аргумент не передан, возвращается текущее значение настроенного запроса _eagerLoaded.
Параметры
-
bool$value Выполнять жадную загрузку.
Возвращает
$thisenableAutoFields() public
enableAutoFields(bool $value = true): $this
Устанавливает, должен ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключает авто-поля. Вы можете снова включить авто-поля с помощью этого метода.
Параметры
-
bool$value optional Установить значение true для включения, false для отключения.
Возвращает
$thisenableBufferedResults() public
enableBufferedResults(bool $enable = true): $this
Включает/Отключает буферизованные результаты.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать результат набора или кэшировать и итерировать его.
При отключении это потребляет меньше памяти, так как полученные результаты не запоминаются для будущих итераций.
Параметры
-
bool$enable optional Включать ли буферизацию
Возвращает
$thisenableHydration() public
enableHydration(bool $enable = true): $this
Переключает гидрацию сущностей.
Если установлено в false, для запроса будут возвращены результаты массива.
Параметры
-
bool$enable optional Используйте boolean для установки режима гидрации.
Возвращает
$thisenableResultsCasting() public
enableResultsCasting(): $this
Включает преобразование результатов.
При включении поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующие типы данных PHP.
Возвращает
$thisepilog() public
epilog(Cake\Database\ExpressionInterface|string|null $expression = null): $this
Строка или выражение, которое будет добавлено к сгенерированному запросу.
Примеры:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Контент эпилога — это SQL-код в сыром виде и не подходит для использования с данными, предоставляемыми пользователем.
Параметры
-
Cake\Database\ExpressionInterface|string|null$expression необязательно Выражение, которое нужно добавить
Возвращает
$thisevery() public @method
every(callable $c): bool
Возвращает true, если все результаты проходят проверку по вызываемому методу.
Параметры
-
callable$c
Возвращает
boolexecute() public
execute(): Cake\Database\StatementInterface
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключения, настроенного в конфигурации. Возвращает объект результата выполнения.
Выполнение запроса включает несколько этапов. Сначала объект преобразуется в соответствии с диалектом подключения, что может привести к генерации нового объекта запроса, который и будет исполнен. После этого, литеральные значения передаются подключению для безопасного связывания с запросом. Наконец, полученный объект запроса декорируется специальными объектами для выполнения обратных вызовов для каждой полученной строки, если необходимо.
Полученный объект запроса итерируемый, поэтому его можно использовать в любом цикле так же, как и массив.
Этот метод может быть переопределён в подклассах запросов для декорации поведения вокруг выполнения запроса.
Возвращает
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 необязательно
Возвращает
Cake\Collection\CollectionInterfacefind() public
find(string $finder, array<string, mixed> $options = []): static
Применяет настраиваемые методы поиска к существующему объекту запроса.
Позволяет комбинировать и применять друг к другу настраиваемые методы поиска.
$repository->find('all')->find('recent'); Выше приведен пример наложения нескольких методов поиска на один запрос.
Параметры
-
string$finder Используемый метод поиска.
-
array<string, mixed>$options необязательно Параметры для поиска.
Возвращает
staticfirst() public
first(): Cake\Datasource\EntityInterface|array|null
Возвращает первый результат выполнения этого запроса. Если запрос ещё не был выполнен, он установит ограничение в 1 для повышения производительности.
Пример:
$singleUser = $query->select(['id', 'username'])->first();
Возвращает
Cake\Datasource\EntityInterface|array|nullfirstOrFail() public
firstOrFail(): Cake\Datasource\EntityInterface|array
Получает первый результат из выполняемого запроса или вызывает исключение.
Возвращает
Cake\Datasource\EntityInterface|arrayИсключения
Cake\Datasource\Exception\RecordNotFoundExceptionПри отсутствии первого записей.
formatResults() public
formatResults(callable|null $formatter = null, int|bool $mode = self::APPEND): $this
Регистрирует новую функцию обратного вызова форматирования, которая должна выполняться при попытке извлечения результатов из базы данных.
Если второй аргумент установлен в true, он удалит предыдущие форматировщики и заменит их переданным первым аргументом.
Функции обратного вызова должны возвращать объект итератора, который будет использоваться в качестве значения возврата для результата этого запроса. Функции форматирования применяются после выполнения всех MapReduce процедур для этого запроса.
Функции обратного вызова форматирования получат два аргумента: первый — объект, реализующий \Cake\Collection\CollectionInterface, который можно просматривать и изменять по своему усмотрению. Второй — экземпляр запроса, к которому применяется функция обратного вызова форматирования.
Обычно экземпляр запроса, полученный функцией обратного вызова форматирования, совпадает с экземпляром запроса, к которому был прикреплён обратный вызов, за исключением случаев объединённой ассоциации. В этом случае обратный вызов будет вызван на стороне запроса источника ассоциации, и он получит этот экземпляр запроса вместо экземпляра запроса, к которому был первоначально прикреплён обратный вызов — см. примеры ниже!
Примеры:
Возвращает все результаты из таблицы, индексированной по id:
$query->select(['id', 'name'])->formatResults(function ($results) {
return $results->indexBy('id');
}); Добавление нового столбца в ResultSet:
$query->select(['name', 'birth_date'])->formatResults(function ($results) {
return $results->map(function ($row) {
$row['age'] = $row['birth_date']->diff(new DateTime)->y;
return $row;
});
}); Добавление нового столбца в результаты с учётом конфигурации гидратации запроса:
$query->formatResults(function ($results, $query) {
return $results->map(function ($row) use ($query) {
$data = [
'bar' => 'baz',
];
if ($query->isHydrationEnabled()) {
$row['foo'] = new Foo($data)
} else {
$row['foo'] = $data;
}
return $row;
});
}); Сохранение доступа к экземпляру целевого запроса ассоциации при объединении, унаследовав аргумент запроса функции обратного вызова:
// Assuming a `Articles belongsTo Authors` association that uses the join strategy
$articlesQuery->contain('Authors', function ($authorsQuery) {
return $authorsQuery->formatResults(function ($results, $query) use ($authorsQuery) {
// Here `$authorsQuery` will always be the instance
// where the callback was attached to.
// The instance passed to the callback in the second
// argument (`$query`), will be the one where the
// callback is actually being applied to, in this
// example that would be `$articlesQuery`.
// ...
return $results;
});
}); Параметры
-
callable|null$formatter optional Функция форматирования.
-
int|bool$mode optional Определяет, будет ли форматирование перезаписано, добавленно или вставлено перед.
Возвращает
$thisВыбрасывает
InvalidArgumentExceptionfrom() public
from(array|string $tables = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц для использования в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передается массив, ключи будут использоваться для алиасирования таблиц, используя значение в качестве фактического поля для алиасирования. Можно алиасить строки, объекты ExpressionInterface или даже другие объекты запросов.
По умолчанию эта функция будет добавлять любой переданный аргумент в список таблиц, которые необходимо выбрать, если второй аргумент не установлен в 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 необязательно таблицы, которые нужно добавить в список. Этот аргумент может быть передан в виде массива строк, массива объектов выражений или одной строки. См. примеры выше для допустимых типов вызовов.
-
bool$overwrite необязательно необходимо ли сбросить таблицы переданным списком или нет
Возвращает
$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<string, string>
Получает значения по умолчанию типов текущей карты типов.
Возвращает
array<string, string>getEagerLoader() public
getEagerLoader(): Cake\ORM\EagerLoader
Возвращает текущую настроенную инстанцию.
Возвращает
Cake\ORM\EagerLoadergetIterator() public
getIterator(): Cake\Datasource\ResultSetInterface
Выполняет данный запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерироваться по запросу без ручного вызова execute(), что делает его похожим на набор результатов, а не на сам запрос.
Возвращает
Cake\Datasource\ResultSetInterfacegetMapReducers() public
getMapReducers(): array
Возвращает список ранее зарегистрированных процедур map reduce.
Возвращает
arraygetOptions() public
getOptions(): array
Возвращает массив с пользовательскими параметрами, применёнными к этому запросу и ещё не обработанными другим методом в этом классе.
Пример:
$query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']); $query->getOptions(); // Returns ['doABarrelRoll' => true]
Возвращает
arrayСм. также
applyOptions()
getRepository() public @method
getRepository(): Cake\ORM\Table
Возвращает объект таблицы по умолчанию, который будет использоваться этим запросом, то есть таблицу, которая будет отображаться в from-оператор.
Возвращает
Cake\ORM\TablegetResultFormatters() public
getResultFormatters(): array<callable>
Возвращает список ранее зарегистрированных процедур форматирования.
Возвращает
array<callable>getSelectTypeMap() public
getSelectTypeMap(): Cake\Database\TypeMap
Получает класс TypeMap, где хранятся типы для каждого поля в предложении select.
Возвращает
Cake\Database\TypeMapgetTypeMap() public
getTypeMap(): Cake\Database\TypeMap
Возвращает существующую карту типов.
Возвращает
Cake\Database\TypeMapgetValueBinder() public
getValueBinder(): Cake\Database\ValueBinder
Возвращает используемый в данный момент экземпляр ValueBinder.
ValueBinder отвечает за генерацию значений-заменителей запроса и временное сопоставление значений с этими заменителями, чтобы они могли быть корректно переданы объекту оператора.
Возвращает
Cake\Database\ValueBindergroup() public
group(Cake\Database\ExpressionInterface|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей для использования в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражения, одно выражение или одна строка.
По умолчанию эта функция будет добавлять любой переданный аргумент в список группируемых полей, если второй аргумент не установлен в значение true.
Примеры:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Поля группировки не подходят для использования с данными, вводимыми пользователем, так как они не проходят проверку на безопасность в создателе запроса.
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields поля, которые нужно добавить в список
-
bool$overwrite optional нужно ли сбросить поля с переданным списком или нет
Возвращает
$thisgroupBy() public @method
groupBy(callable|string $field): Cake\Collection\CollectionInterface
Группирует все результаты в памяти по значению столбца.
Параметры
-
callable|string$field
Возвращает
Cake\Collection\CollectionInterfacehaving() public
having(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использоваться в HAVING разделе для этого запроса. Этот метод работает точно так же, как и метод where(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля Having не подходят для использования с данными, предоставленными пользователем, так как они не очищаются создателем запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions optional Условия having.
-
array<string, string>$types optional Ассоциативный массив имён типов, используемых для привязки значений к запросу
-
bool$overwrite optional нужно ли сбросить условия с переданным списком или нет
Возвращает
$thisСм. также
identifier() public
identifier(string $identifier): Cake\Database\ExpressionInterface
Создаёт выражение, ссылающееся на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
Значение используется как есть, и вам может потребоваться использовать псевдонимы или включить ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.
Пример
$query->newExpr()->lte('count', $query->identifier('total')); Параметры
-
string$identifier Идентификатор для выражения
Возвращает
Cake\Database\ExpressionInterfaceindexBy() public @method
indexBy(callable|string $callback): Cake\Collection\CollectionInterface
Возвращает результаты, индексированные по значению столбца.
Параметры
-
callable|string$callback
Возвращает
Cake\Collection\CollectionInterfaceinnerJoin() public
innerJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array<string, string> $types = []): $this
Добавляет единственное условие INNER JOIN к запросу.
Это метод-сокращение для построения объединений через join().
Аргументы этого метода идентичны сокращению leftJoin(), пожалуйста, обратитесь к описанию этого метода для получения дополнительной информации.
Параметры
-
array<string, mixed>|string$table Таблица для объединения
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array<string, string>$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisinnerJoinWith() public
innerJoinWith(string $assoc, callable|null $builder = null): $this
Создаёт ВНУТРЕННЕЕ объединение с переданной таблицей ассоциации, сохраняя соответствие внешних ключей и настраиваемые условия, которые были первоначально заданы для него.
Эта функция добавит записи в граф contain.
Пример:
// Bring only articles that were tagged with 'cake'
$query->innerJoinWith('Tags', function ($q) {
return $q->where(['name' => 'cake']);
}); Это создаст следующий SQL:
SELECT Articles.* FROM articles Articles INNER JOIN tags Tags ON Tags.name = 'cake' INNER JOIN articles_tags ArticlesTags ON ArticlesTags.tag_id = Tags.id AND ArticlesTags.articles_id = Articles.id
Эта функция работает так же, как matching() с отличием в том, что она не будет выбирать никаких полей из ассоциации.
Параметры
-
string$assoc Ассоциация для объединения
-
callable|null$builder optional функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$thisСм. также
insert() public
insert(array $columns, array<string, string> $types = []): $this
Создать запрос на вставку.
Это изменяет тип запроса на 'insert'. Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values()
Можно комбинировать с методом where() для создания запросов на удаление.
Параметры
-
array$columns Столбцы для вставки.
-
array<string, string>$types optional Сопоставление столбцов и их типов данных.
Возвращаемое значение
$thisinto() public
into(string $table): $this
Установить имя таблицы для запросов вставки.
Параметры
-
string$table Имя таблицы для вставки.
Возвращаемое значение
$thisisAutoFieldsEnabled() public
isAutoFieldsEnabled(): bool|null
Получить, должен ли ORM автоматически добавлять поля.
По умолчанию вызов select() отключает авто-поля. Вы можете снова включить их с помощью enableAutoFields().
Возвращаемое значение
bool|nullisBufferedResultsEnabled() public
isBufferedResultsEnabled(): bool
Возвращает, включены ли буферизованные результаты.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать результат или кэшировать и итерировать его.
При отключении это позволит сэкономить память, так как полученные результаты не запоминаются для будущих итераций.
Возвращаемое значение
boolisEagerLoaded() public
isEagerLoaded(): bool
Возвращает текущее значение сконфигурированного запроса _eagerLoaded
Возвращаемое значение
boolisEmpty() public @method
isEmpty(): bool
Возвращает true, если этот запрос не нашел результатов.
Возвращает
boolisHydrationEnabled() public
isHydrationEnabled(): bool
Возвращает текущий режим гидратации.
Возвращает
boolisResultsCastingEnabled() public
isResultsCastingEnabled(): bool
Возвращает, включено ли/выключено ли преобразование результатов.
При включенном преобразовании поля в результатах, возвращаемых этим запросом, будут преобразованы в соответствующий тип данных PHP.
При выключенном преобразовании поля будут возвращены так, как они получены от драйвера базы данных (в большинстве сред это означает, что они возвращаются как строки), что может улучшить производительность с большими наборами данных.
Возвращает
booljoin() public
join(array<string, mixed>|string $tables, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет одну или несколько таблиц для использования в качестве условий JOIN в этом запросе. Таблицы могут быть переданы как массив строк, массив, описывающий части соединения, массив с несколькими описаниями соединений или одна строка.
По умолчанию эта функция добавляет любой переданный аргумент в список таблиц для соединения, если третий аргумент не установлен в значение true.
Когда тип соединения не указан, по умолчанию используется INNER JOIN: $query->join(['authors']) приведет к INNER JOIN authors ON 1 = 1
Также можно задавать псевдонимы для соединений, используя ключ массива: $query->join(['a' => 'authors']) приведет к INNER JOIN authors a ON 1 = 1
Соединение можно полностью описать и присвоить псевдоним, используя обозначение массива:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
]
]);
// Produces LEFT JOIN authors a ON a.id = b.author_id Вы даже можете указать несколько соединений в массиве, включая полное описание:
$query->join([
'a' => [
'table' => 'authors',
'type' => 'LEFT',
'conditions' => 'a.id = b.author_id'
],
'p' => [
'table' => 'publishers',
'type' => 'INNER',
'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
]
]);
// LEFT JOIN authors a ON a.id = b.author_id
// INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation" Использование условий и типов
Условиям можно присвоить значения, как в примерах выше, используя строку для сравнения столбцов или строку с уже приведенными в кавычки буквальными значениями. Кроме того, можно использовать условия, выраженные в массивах или объектах выражений.
При использовании массивов для выражения условий часто желательно преобразовать буквальные значения в правильное представление базы данных. Это достигается с помощью второго параметра этой функции.
$query->join(['a' => [
'table' => 'articles',
'conditions' => [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
]
]], ['a.posted' => 'datetime', 'a.published' => 'boolean']) Переопределение соединений
При создании псевдонимизированных соединений с использованием обозначения массива можно переопределить предыдущие определения соединений, используя тот же псевдоним в последующих вызовах этой функции, или можно заменить все ранее определенные соединения другим списком, если третий параметр этой функции установлен в значение true.
$query->join(['alias' => 'table']); // joins table with as alias $query->join(['alias' => 'another_table']); // joins another_table with as alias $query->join(['something' => 'different_table'], [], true); // resets joins list
Параметры
-
array<string, mixed>|string$tables список таблиц, которые должны быть объединены в запросе
-
array<string, string>$types optional Ассоциативный массив имен типов, используемых для привязки значений к запросу
-
bool$overwrite optional необходимо ли сбросить соединения с переданным списком или нет
Возвращает
$thisСм. также
jsonSerialize() public
jsonSerialize(): Cake\Datasource\ResultSetInterface
Выполняет запрос и преобразует результат в JSON.
Часть интерфейса JsonSerializable.
Возвращает
Cake\Datasource\ResultSetInterfacelast() public @method
last(): mixed
Возвращает последнюю строку результата запроса
Возвращает
mixedleftJoin() public
leftJoin(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет условие LEFT JOIN к запросу.
Это метод для краткого построения объединений через join().
Имя таблицы может быть передано как строка или как массив, если требуется псевдоним:
// LEFT JOIN authors ON authors.id = posts.author_id
$query->leftJoin('authors', 'authors.id = posts.author_id');
// LEFT JOIN authors a ON a.id = posts.author_id
$query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id'); Условие может быть передано как строки, массивы или объекты выражений. При использовании массивов можно комбинировать их с параметром $types для определения способа преобразования значений:
$query->leftJoin(['a' => 'articles'], [
'a.posted >=' => new DateTime('-3 days'),
'a.published' => true,
'a.author_id = authors.id'
], ['a.posted' => 'datetime', 'a.published' => 'boolean']); См. join() для получения дополнительной информации об условиях и типах.
Параметры
-
array<string, mixed>|string$table Таблица для объединения
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array$types optional Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisleftJoinWith() public
leftJoinWith(string $assoc, callable|null $builder = null): $this
Создаёт LEFT JOIN с переданной таблицей ассоциаций, сохраняя соответствие внешних ключей и пользовательские условия, которые были изначально заданы для неё.
Эта функция добавит записи в contain граф.
Пример:
// Get the count of articles per user
$usersQuery
->select(['total_articles' => $query->func()->count('Articles.id')])
->leftJoinWith('Articles')
->group(['Users.id'])
->enableAutoFields(); Вы также можете настроить условия, передаваемые в LEFT JOIN:
// Get the count of articles per user with at least 5 votes
$usersQuery
->select(['total_articles' => $query->func()->count('Articles.id')])
->leftJoinWith('Articles', function ($q) {
return $q->where(['Articles.votes >=' => 5]);
})
->group(['Users.id'])
->enableAutoFields(); Это создаст следующий SQL:
SELECT COUNT(Articles.id) AS total_articles, Users.* FROM users Users LEFT JOIN articles Articles ON Articles.user_id = Users.id AND Articles.votes >= 5 GROUP BY USers.id
Можно выполнить left join глубоких ассоциаций, используя нотацию точки
Пример:
// 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(Cake\Database\ExpressionInterface|int|null $limit): $this
Устанавливает количество записей, которые должны быть извлечены из базы данных, принимает целое число или объект выражения, который вычисляется в целое число. В некоторых базах данных эта операция может быть не поддерживается или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$limit количество записей, которые должны быть возвращены
Возвращает
$thismap() public @method
map(callable $c): Cake\Collection\CollectionInterface
Изменяет каждый из результатов с помощью вызываемого объекта
Параметры
-
callable$c
Возвращает
Cake\Collection\CollectionInterfacemapReduce() public
mapReduce(callable|null $mapper = null, callable|null $reducer = null, bool $overwrite = false): $this
Зарегистрировать новую процедуру MapReduce для выполнения над результатами базы данных. И вызываемый объект маппера, и вызываемый объект коллбека должны быть вызываемыми объектами.
Маршрутизация MapReduce будет выполняться только при выполнении запроса и попытке получения первого результата.
Если третий аргумент установлен в true, предыдущие мап-редукторы будут удалены и заменены переданными аргументами.
Параметры
-
callable|null$mapper optional Вызываемый объект маппера.
-
callable|null$reducer optional Функция редукции.
-
bool$overwrite optional Установите в значение 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 optional Функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$thismax() public @method
max(mixed $field): mixed
Возвращает максимальное значение для одного столбца во всех результатах.
Параметры
- $field
Возвращает
mixedmin() public @method
min(mixed $field): mixed
Возвращает минимальное значение для одного столбца во всех результатах.
Параметры
- $field
Возвращает
mixedmodifier() public
modifier(Cake\Database\ExpressionInterface|array|string $modifiers, bool $overwrite = false): $this
Добавляет один или несколько модификаторов, которые будут использоваться в SELECT.
По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в значение true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
-
Cake\Database\ExpressionInterface|array|string$modifiers модификаторы, которые нужно применить к запросу
-
bool$overwrite опционально необходимо ли сбросить порядок с помощью списка полей
Возвращаемое значение
$thisnest() public @method
nest(mixed $k, mixed $p, mixed $n = 'children'): Cake\Collection\CollectionInterface
Создает древовидную структуру, вкладывая значения столбца $p в те, которые имеют то же значение для $k, используя $n в качестве ключа вложения.
Параметры
- $k
- $p
- $n опционально
Возвращаемое значение
Cake\Collection\CollectionInterfacenewExpr() public
newExpr(Cake\Database\ExpressionInterface|array|string|null $rawExpression = null): Cake\Database\Expression\QueryExpression
Возвращает новый объект QueryExpression. Эта функция полезна при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать специализированный класс QueryExpression, если это необходимо.
Вы можете необязательно передать строку с исходным SQL-запросом или массив выражений в любом формате, поддерживаемом \Cake\Database\Expression\QueryExpression:
$expression = $query->newExpr(); // Returns an empty expression object
$expression = $query->newExpr('Table.column = Table2.column'); // Return a raw SQL expression Параметры
-
Cake\Database\ExpressionInterface|array|string|null$rawExpression опционально Строка, массив или что-нибудь, что нужно обернуть в объект выражения
Возвращаемое значение
Cake\Database\Expression\QueryExpressionnotMatching() public
notMatching(string $assoc, callable|null $builder = null): $this
Добавляет условия фильтрации к этому запросу, чтобы получить только строки, не имеющие соответствия в другой связанной таблице, на основе условий в связанной таблице.
Эта функция добавит записи в contain граф.
Пример:
// Bring only articles that were not tagged with 'cake'
$query->notMatching('Tags', function ($q) {
return $q->where(['name' => 'cake']);
}); Можно фильтровать по глубоким ассоциациям, используя нотацию точек:
Пример:
// Bring only articles that weren't commented by 'markstory'
$query->notMatching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Поскольку эта функция создаст LEFT JOIN, вы можете рассмотреть возможность вызова distinct для этого запроса, так как вы можете получить дублированные строки, если ваши условия уже не отфильтровывают их. Это может быть, например, в случае, если у одной статьи несколько комментариев.
Пример:
// Bring unique articles that were commented by 'markstory'
$query->distinct(['Articles.id'])
->notMatching('Comments.Users', function ($q) {
return $q->where(['username' => 'markstory']);
}); Обратите внимание, что запрос, переданный в замыкание, будет принимать только вызов select, where, andWhere и orWhere для него. Если вы хотите добавить более сложные условия, вы можете сделать это непосредственно в основном запросе.
Параметры
-
string$assoc Ассоциация для фильтрации
-
callable|null$builder optional функция, которая получит предварительно созданный объект запроса, который можно использовать для добавления пользовательских условий или выбора некоторых полей
Возвращает
$thisoffset() public
offset(Cake\Database\ExpressionInterface|int|null $offset): $this
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничного отображения больших результатов. Принимает целое число или объект выражения, который вычисляется в целое число.
В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
-
Cake\Database\ExpressionInterface|int|null$offset количество записей, которые нужно пропустить
Возвращает
$thisorder() public
order(Cake\Database\ExpressionInterfaceClosure|array|string $fields, bool $overwrite = false): $this
Добавляет одно или несколько полей для использования в предложении ORDER в этом запросе. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передаётся массив, ключи будут использоваться в качестве самих полей, а значения — для указания порядка сортировки. При многократном вызове с одинаковыми полями в качестве ключей последнее определение порядка будет иметь приоритет.
По умолчанию эта функция добавляет любой переданный аргумент в список полей для выбора, если только второй аргумент не установлен в значение true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Результат:
ORDER BY title DESC, author_id ASC
$query
->order(['title' => $query->newExpr('DESC NULLS FIRST')])
->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
Преобразуется в:
ORDER BY (id %2 = 0), title ASC
Если вам нужно задавать сложные выражения в качестве условий сортировки, вы должны использовать orderAsc() или orderDesc().
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string$fields Поля, которые нужно добавить в список
-
bool$overwrite необязательно Определяет, нужно ли сбрасывать порядок с помощью списка полей или нет
Возвращает
$thisorderAsc() public
orderAsc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавляет предложение ORDER BY с направлением ASC.
Этот метод позволяет устанавливать сложные выражения в качестве условий сортировки в отличие от order().
Поля сортировки не подходят для использования с данными, введёнными пользователем, поскольку они не проверяются на безопасность в конструкторе запроса.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Определяет, нужно ли сбрасывать предложения сортировки.
Возвращает
$thisorderDesc() public
orderDesc(Cake\Database\ExpressionInterfaceClosure|string $field, bool $overwrite = false): $this
Добавить предложение ORDER BY с направлением DESC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки в отличие от order().
Поля сортировки не подходят для использования с данными, предоставленными пользователем, так как они не проверяются на безопасность с помощью генератора запросов.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|string$field Поле для сортировки.
-
bool$overwrite необязательно Устанавливает, нужно ли сбрасывать предложения сортировки.
Возвращает
$thispage() public
page(int $num, int|null $limit = null): $this
Устанавливает страницу результатов, которую вы хотите получить.
Этот метод предоставляет более удобный интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit будет по умолчанию установлен на существующее ограничение, а если и оно пустое, то будет использоваться 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(array<string, mixed>|string $table, Cake\Database\ExpressionInterface|array|string $conditions = [], array $types = []): $this
Добавляет одиночное условие RIGHT JOIN в запрос.
Это метод-сокращение для построения объединений через join().
Аргументы этого метода идентичны аргументам метода-сокращения leftJoin(), пожалуйста, обратитесь к описанию этого метода для получения более подробной информации.
Параметры
-
array<string, mixed>|string$table Таблица, с которой необходимо объединиться
-
Cake\Database\ExpressionInterface|array|string$conditions optional Условия для объединения.
-
array$types optional список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$thisrowCountAndClose() public
rowCountAndClose(): int
Выполняет SQL-запрос этого объекта и немедленно закрывает оператор перед возвратом количества изменённых строк.
Этот метод можно использовать с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчёта записей.
Пример
$rowCount = $query->update('articles')
->set(['published'=>true])
->where(['published'=>false])
->rowCountAndClose(); Приведённый выше пример изменит столбец published на true для всех записей со значением false и вернёт количество обновлённых записей.
Возвращаемое значение
intsample() public @method
sample(int $size = 10): Cake\Collection\CollectionInterface
Перемешивание результатов в памяти и возврат подмножества.
Параметры
-
int$size необязательный
Возвращаемое значение
Cake\Collection\CollectionInterfaceselect() public
select(Cake\Database\ExpressionInterface|callable|array|string $fields = [], bool $overwrite = false): $this
Добавляет новые поля для возврата в SELECT операторе при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передается массив, ключи будут использоваться для алиасов полей, используя значение как реальное поле для алиаса. Можно алиасить строки, объекты Expression или даже другие объекты Query.
Если передается вызываемая функция, возвращаемый массив функции будет использоваться как список полей.
По умолчанию эта функция будет добавлять любой переданный аргумент в список выбираемых полей, если второй аргумент не установлен в значение true.
Примеры:
$query->select(['id', 'title']); // Produces SELECT id, title
$query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
$query->select('id', true); // Resets the list: SELECT id
$query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
$query->select(function ($query) {
return ['article_id', 'total' => $query->count('*')];
}) По умолчанию поля не выбираются, если у вас есть экземпляр Cake\ORM\Query и вы пытаетесь добавить поля, вы также должны вызвать Cake\ORM\Query::enableAutoFields() для выбора полей по умолчанию из таблицы.
Если вы передаете экземпляр класса Cake\ORM\Table или Cake\ORM\Association, все поля в схеме таблицы или ассоциации будут добавлены в предложение select.
Параметры
-
Cake\Database\ExpressionInterface|callable|array|string$fields optional Поля, которые нужно добавить в список.
-
bool$overwrite optional нужно ли сбрасывать поля переданным списком или нет
Возвращает
$thisselectAllExcept() public
selectAllExcept(Cake\ORM\TableCake\ORM\Association $table, array<string> $excludedFields, bool $overwrite = false): $this
Все поля, связанные со переданной таблицей, за исключением исключённых полей, будут добавлены в предложение SELECT запроса. Переданные исключённые поля не должны иметь псевдонимов. После первого вызова этого метода, второй вызов не может использоваться для удаления полей, которые уже были добавлены в запрос в первый раз. Если вам нужно изменить список после первого вызова, передайте значение overwrite равное true, что сбросит предложение SELECT, удалив все предыдущие добавления.
Параметры
-
Cake\ORM\TableCake\ORM\Association$table Таблица для получения массива столбцов
-
array<string>$excludedFields Имена столбцов без псевдонимов, которые вы не хотите выбирать из $table
-
bool$overwrite необязательный Определяет, нужно ли сбросить/удалить ранее выбранные поля
Возвращает
$thisВызывает
InvalidArgumentExceptionЕсли Association|Table не передан в первом аргументе
set() public
set(Cake\Database\Expression\QueryExpressionClosure|array|string $key, mixed $value = null, array<string, string>|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');
}); Параметры
-
Cake\Database\Expression\QueryExpressionClosure|array|string$key -
Имя столбца или массив ключей
- значения для установки. Это также может быть QueryExpression, содержащий фрагмент SQL. Это также может быть замыкание, которое должно возвращать объект выражения.
-
mixed$value необязательный Значение, на которое нужно обновить $key. Может быть null, если $key является массивом или QueryExpression. Когда $key является массивом, этот параметр будет использован как $types.
-
mixed$types необязательный Типы столбцов для обработки данных.
Возвращает
$thissetConnection() public
setConnection(Cake\Database\Connection $connection): $this
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Параметры
-
Cake\Database\Connection$connection Экземпляр подключения
Возвращает
$thissetDefaultTypes() public
setDefaultTypes(array<string, string> $types): $this
Переопределяет сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно задать сопоставления типов, которые используются в нескольких функциях/выражениях в запросе.
Чтобы добавить значение по умолчанию, не перезаписывая существующие, используйте getTypeMap()->addDefaults()
Параметры
-
array<string, string>$types Массив типов, которые нужно установить.
Возвращает
$thisСм. также
setEagerLoader() public
setEagerLoader(Cake\ORM\EagerLoader $instance): $this
Устанавливает экземпляр класса загрузчика с нетерпением, который будет использоваться для загрузки ассоциаций и хранения содержаний.
Параметры
-
Cake\ORM\EagerLoader$instance Используемый загрузчик с нетерпением.
Возвращает
$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(Cake\Database\TypeMap|array $typeMap): $this
Создает новый TypeMap, если $typeMap является массивом, иначе меняет его на предоставленный.
Параметры
-
Cake\Database\TypeMap|array$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 необязательный
Возвращает
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(callable|string $field): float
Возвращает сумму всех значений для одного столбца
Параметры
-
callable|string$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, array<string> $parts): $this
Будет итерироваться по предоставленным частям.
Функции обхода могут агрегировать результаты, используя переменные в замыкании или переменные экземпляра. Этот метод может быть использован для обхода подмножества частей запроса для рендеринга SQL запроса.
Обратный вызов получит 2 параметра: первый — значение части запроса, по которой происходит итерация, а второй — имя этой части.
Пример
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
-
callable$visitor Функция или вызываемый объект, которые будут выполняться для каждой части.
-
array<string>$parts Список частей запроса для обхода.
Возвращает
$thistriggerBeforeFind() public
triggerBeforeFind(): void
Вызвать событие beforeFind в объекте репозитория запроса.
Будет вызвано не более одного раза и только для запросов выбора.
Возвращает
voidtype() public
type(): string
Возвращает тип этого запроса (выбор, вставка, обновление, удаление)
Возвращает
stringunion() public
union(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет полный запрос, который будет использоваться совместно с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов, который вернёт переданный запрос. Вы можете добавить столько запросов, сколько нужно, вызывая этот метод несколько раз с разными запросами.
По умолчанию оператор UNION удаляет дублирующие строки. Если вы хотите включить все строки для всех запросов, используйте unionAll().
Примеры
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->union($union);
Создаст:
SELECT id, name FROM things d UNION SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полный SQL-запрос, который будет использоваться в операторе UNION
-
bool$overwrite необязательно следует ли сбросить список запросов для обработки или нет
Возвращает
$thisunionAll() public
unionAll(Cake\Database\Query|string $query, bool $overwrite = false): $this
Добавляет полное выражение запроса, которое будет использоваться совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с набором, который вернёт переданный запрос. Вы можете добавить столько запросов, сколько требуется, вызывая этот метод несколько раз с разными запросами.
В отличие от UNION, UNION ALL не будет удалять дублирующиеся строки.
$union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']); $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
Будет генерировать:
SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a
Параметры
-
Cake\Database\Query|string$query полное SQL-выражение запроса, которое будет использоваться в операторе UNION
-
bool$overwrite optional необходимо ли сбросить список запросов для обработки или нет
Возвращает
$thisupdate() public
update(Cake\Database\ExpressionInterface|string $table = null): $this
Создаёт запрос обновления.
Это изменяет тип запроса на 'update'. Может быть объединён с методами set() и where(), чтобы создать запросы обновления.
Параметры
-
Cake\Database\ExpressionInterface|string$table optional Неиспользуемый параметр.
Возвращает
$thisvalues() public
values(Cake\Database\Expression\ValuesExpressionCake\Database\Query|array $data): $this
Устанавливает значения для запроса вставки.
Многократные вставки могут быть выполнены, вызывая values() более одного раза или предоставив массив наборов значений. Дополнительно $data может быть экземпляром Query для вставки данных из другого SELECT-выражения.
Параметры
-
Cake\Database\Expression\ValuesExpressionCake\Database\Query|array$data Данные для вставки.
Возвращает
$thisИсключения
Cake\Database\Exception\DatabaseExceptionесли вы попытаетесь установить значения до объявления столбцов. Или если вы попытаетесь установить значения в запросах, не являющихся запросами на вставку.
where() public
where(Cake\Database\ExpressionInterfaceClosure|array|string|null $conditions = null, array<string, string> $types = [], bool $overwrite = false): $this
Добавляет условие или набор условий, которые будут использованы в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей со знаками сравнения в нём, значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждая запись будет объединена с остальными условиями с помощью оператора AND. Последовательные вызовы этой функции также объединят новые указанные условия с использованием оператора AND. Кроме того, значения могут быть выражены с помощью объектов выражений, которые могут включать другие объекты запроса.
Любые условия, созданные с помощью этого метода, могут использоваться с любыми запросами типа SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример производит:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания типа, ожидаемого для каждого переданного ключа. Действительные типы могут быть взяты из сопоставления с классом Database\Type.
Вложение условий с союзами:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример производит:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия с союзами сколько угодно. Иногда вам может потребоваться определить 2 разных варианта для одного и того же ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Помните, что каждый раз, когда вы вызываете where() с третьим параметром, установленным в false (по умолчанию), он объединит переданные условия с предыдущим сохранённым списком с использованием оператора AND. Также, использование одного и того же ключа массива дважды в последовательных вызовах этого метода не перезапишет предыдущее значение.
Использование объектов выражений:
$exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
$query->where(['published' => true], ['published' => 'boolean'])->where($exp); Предыдущий пример производит:
WHERE (id != 100 OR author_id != 1) AND published = 1
Другие объекты запроса могут быть использованы в качестве условий для любого поля.
Добавление условий в несколько шагов:
Вы можете использовать вызываемые функции для построения сложных выражений, функции принимают в качестве первого аргумента новый объект QueryExpression и этот экземпляр запроса как второй аргумент. Функции должны возвращать объект выражения, который будет добавлен в список условий для запроса с помощью оператора AND.
$query
->where(['title !=' => 'Hello World'])
->where(function ($exp, $query) {
$or = $exp->or(['id' => 1]);
$and = $exp->and(['id >' => 2, 'id <' => 10]);
return $or->add($and);
}); - Предыдущий пример производит:
WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))
Условия в виде строк:
$query->where(['articles.author_id = authors.id', 'modified IS NULL']);
Предыдущий пример производит:
WHERE articles.author_id = authors.id AND modified IS NULL
Обратите внимание, что при использовании записи в формате массива или объектов выражений все значения будут корректно обрамлены кавычками и автоматически преобразованы в соответствующий тип данных базы данных, тем самым защищая ваше приложение от SQL-инъекций. Если вы используете строковые условия, убедитесь, что ваши значения правильно заключены в кавычки. Самое безопасное – это никогда не использовать строковые условия.
Параметры
-
Cake\Database\ExpressionInterfaceClosure|array|string|null$conditions необязательно Условие фильтрации.
-
array<string, string>$types необязательно Ассоциативный массив имен типов, используемых для привязки значений к запросу
-
bool$overwrite необязательно перезаписать ли условия с переданным списком или нет
Возвращает
$thiswhereInList() public
whereInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие IN или набор условий для использования в операторе WHERE для данного запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в значение true. Будьте осторожны, используя его без надлежащих проверок.
Опции:
-
types- Ассоциативный массив имен типов, используемых для привязки значений к запросу -
allowEmpty- Разрешить пустой массив.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options необязательно Опции
Возвращает
$thiswhereNotInList() public
whereNotInList(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите «allowEmpty» в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotInListOrNull() public
whereNotInListOrNull(string $field, array $values, array<string, mixed> $options = []): $this
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Это также позволяет полю быть null с условием IS NULL, так как значение null приведет к тому, что условие NOT IN всегда будет выполняться неудачно.
Этот метод допускает пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны при его использовании без надлежащей проверки.
Параметры
-
string$field Поле
-
array$values Массив значений
-
array<string, mixed>$options optional Параметры
Возвращает
$thiswhereNotNull() public
whereNotNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, который добавляет условие NOT NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения или список из них, которые не должны быть null.
Возвращает
$thiswhereNull() public
whereNull(Cake\Database\ExpressionInterface|array|string $fields): $this
Удобный метод, добавляющий условие IS NULL в запрос
Параметры
-
Cake\Database\ExpressionInterface|array|string$fields Одно поле или выражения, или список полей, которые должны быть равны NULL.
Возвращаемое значение
$thiswindow() public
window(string $name, Cake\Database\Expression\WindowExpressionClosure $window, bool $overwrite = false): $this
Добавляет именованное выражение окна.
Вы несете ответственность за добавление окон в порядке, требуемом вашей базой данных.
Параметры
-
string$name Имя окна
-
Cake\Database\Expression\WindowExpressionClosure$window Выражение окна
-
bool$overwrite optional Очистить все предыдущие выражения окон запроса
Возвращаемое значение
$thiswith() public
with(Cake\Database\Expression\CommonTableExpressionClosure $cte, bool $overwrite = false): $this
Добавляет новое общее выражение с подзапросом (CTE) в запрос.
Примеры:
Общие выражения с подзапросами могут передаваться как предварительно сконструированные объекты выражений:
$cte = new \Cake\Database\Expression\CommonTableExpression(
'cte',
$connection
->newQuery()
->select('*')
->from('articles')
);
$query->with($cte); или возвращаться из замыкания, которое получит новый объект общего выражения с подзапросом в качестве первого аргумента и новый пустой объект запроса в качестве второго аргумента:
$query->with(function (
\Cake\Database\Expression\CommonTableExpression $cte,
\Cake\Database\Query $query
) {
$cteQuery = $query
->select('*')
->from('articles');
return $cte
->name('cte')
->query($cteQuery);
}); Параметры
-
Cake\Database\Expression\CommonTableExpressionClosure$cte CTE для добавления.
-
bool$overwrite optional Нужно ли сбросить список CTE.
Возвращаемое значение
$thiszip() public @method
zip(arrayTraversable $c): Cake\Collection\CollectionInterface
Возвращает первый результат и запроса, и $c в массиве, затем второй результат и так далее.
Параметры
-
arrayTraversable$c
Возвращаемое значение
Cake\Collection\CollectionInterfacezipWith() public @method
zipWith(mixed $collections, callable $callable): Cake\Collection\CollectionInterface
Возвращает каждый из результатов вызова $c с первыми строками запроса и каждым из элементов, затем вторыми строками и так далее.
Параметры
- $collections
-
callable$callable
Возвращает
Cake\Collection\CollectionInterfaceПодробное описание свойств
$_autoFields protected
Отслеживает, должны ли исходный запрос включать поля из таблицы верхнего уровня.
Тип
bool|null$_beforeFindFired protected
Истинно, если событие beforeFind уже было активировано для этого запроса.
Тип
bool$_cache protected
Экземпляр кэшера запросов, если для этого запроса включен кэш.
Тип
Cake\Datasource\QueryCacher|null$_connection protected
Экземпляр подключения, который будет использоваться для выполнения этого запроса.
Тип
Cake\Database\Connection$_counter protected
Функция, которая может использоваться для подсчета общего количества записей, которые будут соответствовать этому запросу, когда не используется limit
Тип
callable|null$_deleteParts protected
Список клаузов запроса, которые необходимо пройти для генерации оператора DELETE.
Тип
array<string>$_dirty protected
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненное утверждение.
Тип
bool$_eagerLoaded protected
Является ли запрос автономным или результатом операции eager load.
Тип
bool$_eagerLoader protected
Экземпляр класса, ответственного за хранение содержаний ассоциаций и их леничную загрузку при выполнении запроса
Тип
Cake\ORM\EagerLoader|null$_formatters protected
Список классов или колбэков форматирования, которые будут послеобрабатывать результаты при извлечении
Тип
array<callable>$_functionsBuilder protected
Экземпляр объекта-строителя функций, используемый для генерации произвольных SQL функций.
Тип
Cake\Database\FunctionsBuilder|null$_hasFields protected
Указывает, выбрал ли пользователь какие-либо поля перед выполнением запроса. Это используется для определения, следует ли автоматически выбирать какие-либо поля.
Тип
bool|null$_hydrate protected
Следует ли гидратировать результаты в объекты сущностей
Тип
bool$_insertParts protected
Список положений запроса, для обработки при генерации оператора INSERT
Тип
array<string>$_iterator protected
Объект оператора, полученный в результате выполнения этого запроса.
Тип
Cake\Database\StatementInterface|null$_mapReduce protected
Список операций map-reduce, которые должны быть применены к результату запроса
Тип
array$_options protected
Содержит любые пользовательские параметры, переданные с помощью applyOptions, которые не могли быть обработаны ни одним методом в этом классе.
Тип
array$_parts protected
Список частей SQL, которые будут использованы для построения этого запроса.
Тип
array<string, mixed>$_repository public @property
Экземпляр объекта таблицы, к которой привязан этот запрос.
Тип
Cake\ORM\Table$_resultDecorators protected
Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результата запроса при получении. Каждая из функций обратного вызова будет принимать массив строк в качестве первого аргумента.
Тип
array<callable>$_results protected
Результиновый набор данных (ResultSet).
При установке обход выполнения запроса будет пропущен.
Тип
iterable|null$_resultsCount protected
Значение COUNT(*) для запроса.
При установке обход выполнения запроса подсчета будет пропущен.
Тип
int|null$_selectParts protected
Список пунктов запроса, по которым будет проходить обход для генерации оператора SELECT.
Тип
array<string>$_selectTypeMap protected
Карта типов для полей в предложении select.
Тип
Cake\Database\TypeMap|null$_type protected
Тип этого запроса (выборка, вставка, обновление, удаление).
Тип
string$_typeMap protected
Тип
Cake\Database\TypeMap|null$_updateParts protected
Список положений запроса для обхода и генерации оператора UPDATE.
Тип
array<string>$_useBufferedResults protected
Логический флаг, отслеживающий, включены ли буферизованные результаты.
Тип
bool$_valueBinder protected
Объект, отвечающий за генерацию заглушек запроса и временное хранение значений, связанных с каждой из них.
Тип
Cake\Database\ValueBinder|null$aliasingEnabled protected
Включено ли создание псевдонимов для полей.
Тип
bool$typeCastEnabled protected
Флаг отслеживания для отключения приведения типов.
Тип
bool
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.3/class-Cake.ORM.Query.html