Класс Query
Этот класс представляет собой SQL-запрос к реляционной базе данных. Запрос может быть разных типов: select, update, insert и delete. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в конкретный диалект SQL.
- Cake\Database\Query реализует Cake\Database\ExpressionInterface, IteratorAggregate использует Cake\Database\TypeMapTrait
Прямые подклассы
Краткое описание свойств
- Экземпляр подключения, используемый для выполнения этого запроса.
$_connectionprotected -
$_dirtyprotectedbooleanУказывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненную операцию.
- Экземпляр объекта генератора функций, используемый для создания произвольных SQL-функций.
$_functionsBuilderprotected - Объект оператора, полученный в результате выполнения этого запроса.
$_iteratorprotected -
$_partsprotectedСписок частей SQL, которые будут использованы для построения этого запроса.array -
$_resultDecoratorsprotectedarrayСписок функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующего оператора при извлечении. Каждая функция обратного вызова будет получать массив строки в качестве первого аргумента.
- Карта типов для полей в предложении select
$_selectTypeMapprotected -
$_typeprotectedТип этого запроса (select, insert, update, delete).string -
$_useBufferedResultsprotectedbooleanБулево значение для отслеживания включения буферизованных результатов.
-
$_valueBinderprotectedCake\Database\ValueBinder|nullОбъект, ответственный за генерацию заглушек запроса и временное хранение значений, связанных с каждой из них.
-
$typeCastEnabledprotectedФлаг отслеживания для отключения приведения типовboolean
Унаследованные свойства
Краткое описание методов
- __clone() publicГлубокое клонирование этого объекта.
- __construct() publicКонструктор.
- __debugInfo() public
Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.
- __toString() publicВозвращает строковое представление этого запроса (полное SQL-представление).
- _conjugate() protectedВспомогательная функция для построения условий путем объединения объектов QueryExpression.
- _decorateStatement() protected
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обработчиками.
- _dirty() protected
Помечает запрос как грязный, удаляя любые предварительно обработанные данные из кеша в памяти.
- _makeJoin() protectedВозвращает массив, который можно передать методу join, описывающему отдельное условие объединения.
- andHaving() public
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND в предложении HAVING. Этот метод работает точно так же, как и метод
andWhere(). Обратитесь к его документации для понимания использования каждого параметра. - andWhere() public
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора AND. Эта функция принимает список условий в том же формате, что и метод
where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки. - bind() publicСвязывает заполнитель запроса со значением и типом.
- Включить/выключить буферизацию результатов.
- clause() public
Возвращает данные, которые были сохранены в указанном предложении. Это полезно для изменения любой внутренней части запроса, и он используется диалектами SQL для преобразования запроса соответственно перед выполнением. Действительными предложениями, которые можно извлечь, являются: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
-
Устанавливает экземпляр подключения, используемый для выполнения и преобразования этого запроса. При вызове с нулевым аргументом он возвращает текущий экземпляр подключения.
- decorateResults() public
Регистрирует обработчик, который будет выполняться для каждого результата, извлеченного из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с необработанными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с любыми возможными изменениями.
- delete() publicСоздать запрос на удаление.
- disableBufferedResults() publicОтключает буферизацию результатов.
- disableResultsCasting() publicОтключает автоматическое приведение типов полей к соответствующему типу данных PHP.
- distinct() public
Добавляет предложение
DISTINCTв запрос для удаления дубликатов из набора результатов. Это предложение может быть использовано только для запросов select. - enableBufferedResults() publicВключает/выключает буферизацию результатов.
- enableResultsCasting() publicВключает автоматическое приведение типов полей к соответствующему типу.
- epilog() publicСтрока или выражение, которое будет добавлен к сгенерированному запросу.
- execute() public
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключение. Возвращает объект полученного оператора.
- from() public
Добавляет одну или несколько таблиц для использования в предложении FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
- func() public
Возвращает экземпляр объекта-билдера функций, который можно использовать для генерации произвольных SQL-функций.
- getConnection() publicПолучить экземпляр подключения для выполнения и преобразования этого запроса.
- getIterator() public
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать по запросу без необходимости вызова execute() вручную, делая его похожим на набор результатов, а не на сам запрос.
- getSelectTypeMap() public
Получает класс TypeMap, где хранятся типы для каждого из полей в предложении select.
- getValueBinder() publicВозвращает текущий используемый экземпляр ValueBinder.
- group() public
Добавляет одно или несколько полей для использования в предложении GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
- having() public
Добавляет условие или набор условий для использования в предложении
HAVINGдля этого запроса. Этот метод работает точно так же, как и методwhere(). Обратитесь к его документации для понимания использования каждого параметра. - identifier() public
Создает выражение, ссылающееся на идентификатор. Идентификаторы используются для ссылки на имена полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
- innerJoin() publicДобавляет отдельное предложение
INNER JOINк запросу. - insert() publicСоздать запрос на вставку.
- into() publicУстановить имя таблицы для запросов вставки.
- isBufferedResultsEnabled() publicВозвращает, включена ли/выключена ли буферизация результатов.
- join() public
Добавляет одну или несколько таблиц для использования в качестве предложений JOIN в этом запросе. Таблицы могут быть переданы как массив строк, массив, описывающий части объединения, массив с несколькими описаниями объединения или одна строка.
- leftJoin() publicДобавляет отдельное предложение
LEFT JOINв запрос. - limit() public
Устанавливает количество записей, которое должно быть извлечено из базы данных, принимает целое число или объект выражения, оцениваемый как целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.
- modifier() publicДобавляет одно или несколько модификаторов
SELECTдля использования вSELECT. - newExpr() public
Возвращает новый объект QueryExpression. Это удобная функция при построении сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс QueryExpression, если это необходимо.
- offset() public
Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничной обработки больших результатов. Принимает целое число или объект выражения, оцениваемый как целое число.
-
Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора OR в предложении HAVING. Этот метод работает точно так же, как и метод
orWhere()Обратитесь к его документации для понимания использования каждого параметра.
-
Подключает любой ранее определённый набор условий к предоставленному списку с помощью оператора ИЛИ. Эта функция принимает список условий в том же формате, что и метод
where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки. - order() public
Добавляет одно или несколько полей, которые будут использоваться в операторе ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
- orderAsc() publicДобавить оператор ORDER BY со направлением ASC.
- orderDesc() publicДобавить оператор ORDER BY со направлением DESC.
- page() publicУстановить страницу результатов, которую вы хотите.
- removeJoin() publicУдалить объединение, если оно было определено.
- rightJoin() publicДобавляет единственный
RIGHT JOINоператор к запросу. - rowCountAndClose() public
Выполняет SQL-запрос и немедленно закрывает оператор перед возвращением количества строк, изменённых в результате.
- select() public
Добавляет новые поля, которые будут возвращены оператором
SELECT, когда этот запрос будет выполнен. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка. -
Устанавливает класс TypeMap, где хранятся типы каждого из полей в операторе select.
- set() publicУстановить одно или несколько полей для обновления.
- setConnection() publicУстанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
- setSelectTypeMap() public
Устанавливает класс TypeMap, где хранятся типы каждого из полей в операторе select.
- setValueBinder() publicПерезаписать текущий связующий элемент значений.
- sql() publicВозвращает SQL-представление этого объекта.
- traverse() public
Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты с помощью переменных в замыкании или переменных экземпляра. Эта функция обычно используется как способ обхода всех частей запроса, которые будут использоваться для построения запроса.
- traverseExpressions() public
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход всего дерева выражений. Это выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, который хранится внутри этого запроса на любой глубине вложения в любой части запроса.
- type() publicВозвращает тип этого запроса (select, insert, update, delete).
- union() public
Добавляет полный запрос, который будет использоваться совместно с оператором UNION с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызвав этот метод несколько раз с различными запросами.
- unionAll() public
Добавляет полный запрос, который будет использоваться совместно с оператором UNION ALL с этим запросом. Это используется для объединения набора результатов этого запроса с набором результатов запроса, который будет возвращён переданным запросом. Вы можете добавить столько запросов, сколько вам нужно, вызвав этот метод несколько раз с различными запросами.
- update() publicСоздать запрос на обновление.
-
Возвращает текущий экземпляр ValueBinder. Если значение передано, оно будет установлено в качестве нового экземпляра для использования.
- values() publicУстановить значения для запроса вставки.
- where() public
Добавляет условие или набор условий, которые будут использоваться в операторе WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей со знаками сравнения в нём, значения массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одиночная строка или массив строк.
- whereInList() public
Добавляет условие IN или набор условий, которые будут использоваться в операторе WHERE для этого запроса.
- whereNotInList() public
Добавляет условие NOT IN или набор условий, которые будут использоваться в операторе WHERE для этого запроса.
- whereNotNull() publicУдобный метод, который добавляет условие NOT NULL к запросу.
- whereNull() publicУдобный метод, который добавляет условие IS NULL к запросу.
Подробное описание методов
__clone()source public
__clone( )
Выполнить глубокое клонирование этого объекта.
Скопирует все объекты выражений, используемые в каждой из предложений, а также valueBinder.
__construct()source public
__construct( Cake\Database\Connection $connection )
Конструктор.
Параметры
-
Cake\Database\Connection$connection Объект подключения, который будет использоваться для преобразования и выполнения этого запроса
__debugInfo()source public
__debugInfo( )
Возвращает массив, который может быть использован для описания внутреннего состояния этого объекта.
Возвращаемое значение
массив__toString()source public
__toString( )
Возвращает строковое представление этого запроса (полное SQL-предложение).
Возвращаемое значение
строка_conjugate()source protected
_conjugate( string $part , string|null|array|Cake\Database\ExpressionInterface|callable $append , string $conjunction , array $types )
Вспомогательная функция, используемая для построения условий путём составления объектов QueryExpression.
Параметры
- строка
$part - Имя части запроса, к которому будет добавлен новая часть.
- строка|null|массив|
Cake\Database\ExpressionInterface|функция$append - Выражение или функция-строитель для добавления.
- строка
$conjunction - тип союза, который будет использоваться для работы с частью
- массив
$types - ассоциативный массив имён типов, используемых для привязки значений к запросу
_decorateStatement()source protected
_decorateStatement( Cake\Database\StatementInterface $statement )
Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными функциями обратного вызова.
Параметры
-
Cake\Database\StatementInterface$statement - объект для декорации
Возвращаемое значение
Cake\Database\Statement\CallbackStatement_dirty()source protected
_dirty( )
Отмечает запрос как изменённый, удаляя любую предварительно обработанную информацию из кэширования в памяти.
_makeJoin()source protected
_makeJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions , string $type )
Возвращает массив, который можно передать методу join, описывающему отдельную условную связь.
Параметры
- string|array
$table - Таблица для объединения.
- string|array|
Cake\Database\ExpressionInterface$conditions Условие для объединения.
- string
$type - тип соединения
Возвращает
arrayandHaving()source public
andHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор AND в предложении HAVING. Этот метод работает точно так же, как и метод andWhere(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, так как они не очищаются с помощью конструктора запросов.
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условие AND для HAVING.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::andWhere()andWhere()source public
andWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор AND. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно отметить, что при вызове этой функции любой ранее определенный набор условий для этого запроса будет обрабатываться как один аргумент для оператора AND. Эта функция не только будет обрабатывать самое последнее определенное условие, но и все условия в целом.
При использовании массива для определения условий создание ограничений для каждого элемента массива будет использовать ту же логику, что и функция where(). Это означает, что каждый элемент массива будет соединен с другим с помощью оператора AND, если вы не вложены условия в массив, используя другой оператор.
Примеры:
$query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
Создаст:
WHERE title = 'Hello World' AND author_id = 1
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->andWhere(['author_id' => 1, 'comments_count >' => 10])
Создаёт:
WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10
$query
->where(['title' => 'Foo'])
->andWhere(function ($exp, $query) {
return $exp
->or_(['author_id' => 1])
->add(['author_id' => 2]);
}); Генерирует следующие условия:
WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable$conditions - Условия для добавления с AND.
- array
$typesoptional [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::where()Cake\Database\Typebind()source public
bind( string|integer $param , mixed $value , string|integer $type = 'string' )
Связывает заполнитель запроса со значением и типом.
$query->bind(':id', 1, 'integer'); Параметры
- string|integer
$param заполнитель, который будет заменён на процитированную версию $value
- mixed
$value - Значение, подлежащее привязке
- string|integer
$typeoptional 'string' наименование сопоставленного типа, используемое для преобразования при отправке в базу данных
Возвращает
$this
bufferResults()source public deprecated
bufferResults( boolean|null $enable = null )
Включить/выключить буферизацию результатов.
При включении результаты, возвращаемые этим запросом, будут буферизированы. Это позволяет вам многократно итерировать набор результатов или кэшировать и итерировать его.
При отключении это займёт меньше памяти, так как полученные результаты не запоминаются для будущих итераций.
Если вызывается без аргументов, возвращает, включена ли буферизация.
Устарело
3.4.0 Используйте enableBufferedResults()/isBufferedResultsEnabled() вместо этого.Параметры
- boolean|null
$enableoptional null - Включить или выключить буферизацию
Возвращает
boolean|Cake\Database\Query$this
clause()source public
clause( string $name )
Возвращает данные, которые были сохранены в указанном предложении. Это полезно для изменения любой внутренней части запроса, и им пользуются диалекты SQL для преобразования запроса соответственно перед его выполнением. Действительными предложениями, которые можно получить, являются: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.
Возвращаемое значение для каждой из этих частей может варьироваться. Некоторые предложения используют QueryExpression для внутреннего хранения своего состояния, некоторые используют массивы, а другие могут использовать булевы значения или целые числа. Это сводка типов возвращаемых значений для каждого предложения.
- update: string Имя таблицы для обновления
- 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При отсутствии указанного предложения.
connection()source public deprecated
connection( Cake\Database\Connection|null $connection = null )
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса. При вызове с нулевым аргументом он вернет текущий экземпляр подключения.
Устарело
3.4.0 Используйте setConnection()/getConnection() вместо этого.Параметры
-
Cake\Database\Connection|null$connectionoptional null - экземпляр подключения
Возвращает
$this|\Cake\Database\Connection
decorateResults()source public
decorateResults( callable|null $callback , boolean $overwrite = false )
Регистрирует обратный вызов, который будет выполняться для каждого результата, извлекаемого из набора результатов. Функция обратного вызова получит в качестве первого параметра массив с исходными данными из базы данных для каждой строки, которая извлекается, и должна вернуть строку с любыми возможными изменениями.
Обратные вызовы будут выполняться лениво. Если для базы данных извлечено только 3 строки, он будет вызван 3 раза, даже если в курсоре могут быть дополнительные строки.
Обратные вызовы уложены в порядке их регистрации. Если вы хотите сбросить стек, вызовите эту функцию со вторым параметром, установленным в true.
Если вы хотите удалить все декораторы из стека, установите первый параметр в null, а второй в true.
Пример
$query->decorateResults(function ($row) {
$row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
return $row;
}); Параметры
- callable|null
$callback - Функция обратного вызова, которая вызывается при получении результатов.
- boolean
$overwriteoptional false - Указывает, следует ли добавить или заменить все существующие декораторы.
Возвращает
$this
delete()source public
delete( string|null $table = null )
Создаёт запрос на удаление.
Может быть объединён с from(), where() и другими методами для создания запросов на удаление с конкретными условиями.
Параметры
- string|null
$tableoptional null - Таблица, используемая при удалении.
Возвращает
$this
disableBufferedResults()source public
disableBufferedResults( )
Отключает буферизацию результатов.
Отключение буферизации сократит потребление памяти, поскольку полученные результаты не будут запоминаться для будущих итераций.
Возвращает
$this
disableResultsCasting()source public
disableResultsCasting( )
Отключает автоматическое преобразование полей в соответствующий PHP тип данных
Возвращает
$this
distinct()source public
distinct( array|Cake\Database\ExpressionInterface|string|boolean $on = [] , boolean $overwrite = false )
Добавляет 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); Параметры
- array|
Cake\Database\ExpressionInterface|string|boolean$onнеобязательный [] Включить/отключить режим distinct или список полей для фильтрации
- boolean
$overwriteнеобязательный false - необходимо ли сбросить поля с переданным списком или нет
Возвращает
$this
enableBufferedResults()source public
enableBufferedResults( boolean $enable = true )
Включает/Отключает буферизацию результатов.
При включении результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать набор результатов или кэшировать и итерировать его.
При отключении будет использоваться меньше памяти, так как полученные результаты не будут запоминаться для будущих итераций.
Параметры
- boolean
$enableнеобязательный true - Включить или отключить буферизацию
Возвращает
$this
enableResultsCasting()source public
enableResultsCasting( )
Включает автоматическое приведение полей к соответствующему типу
Возвращает
$this
epilog()source public
epilog( string|Cake\Database\Expression\QueryExpression|null $expression = null )
Строка или выражение, которое будет добавлено к сгенерированному запросу
Примеры:
$query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
$query
->insert('articles', ['title'])
->values(['author_id' => 1])
->epilog('RETURNING id'); Содержание эпилога является сырым SQL и не подходит для использования с данными, введёнными пользователем.
Параметры
- string|
Cake\Database\Expression\QueryExpression|null$expressionнеобязательный null - Выражение, которое необходимо добавить
Возвращает
$this
execute()source public
execute( )
Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключённой базы данных. Возвращает объект результата.
Выполнение запроса включает несколько этапов: сначала подключение преобразует этот объект в соответствии со своей спецификой, что может привести к генерации другого объекта запроса, который будет фактически выполнен. Сразу после этого буквальные значения передаются подключению, чтобы они связывались с запросом безопасным образом. Наконец, результирующий запрос украшается пользовательскими объектами для выполнения обратных вызовов для каждой извлечённой строки, если это необходимо.
Результирующий запрос можно использовать в любом цикле, как и с массивом.
Этот метод может быть переопределен в подклассах запроса для изменения поведения при выполнении запроса.
Возвращает
Cake\Database\StatementInterfacefrom()source public
from( array|string $tables = [] , boolean $overwrite = false )
Добавляет одну или несколько таблиц, которые будут использоваться в условии FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
Если передаётся массив, ключи будут использоваться для алиасов таблиц, используя значение в качестве фактического поля для алиаса. Можно создавать алиасы для строк, объектов ExpressionInterface или даже других объектов Query.
По умолчанию эта функция будет добавлять все переданные аргументы в список таблиц, которые необходимо выбрать, если второй аргумент не установлен в значение true.
Этот метод может использоваться для запросов SELECT, UPDATE и DELETE.
Примеры:
$query->from(['p' => 'posts']); // Produces FROM posts p
$query->from('authors'); // Appends authors: FROM posts p, authors
$query->from(['products'], true); // Resets the list: FROM products
$query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub Параметры
- array|string
$tablesнеобязательный [] таблицы для добавления в список. Этот аргумент может быть передан как массив строк, массив объектов выражений или одна строка. Смотрите примеры выше для допустимых типов вызовов.
- boolean
$overwriteнеобязательный false - необходимо ли сбросить таблицы с переданным списком или нет
Возвращает
$this|array
func()source public
func( )
Возвращает экземпляр объекта-строителя функций, который может использоваться для генерации произвольных SQL-функций.
Пример:
$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02']) Возвращает
Cake\Database\FunctionsBuildergetConnection()source public
getConnection( )
Получает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса.
Возвращает
Cake\Database\ConnectiongetIterator()source public
getIterator( )
Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости ручного вызова execute(), что делает его похожим на набор результатов, а не на сам запрос.
Возвращает
Cake\Database\StatementInterface|nullРеализация
IteratorAggregate::getIterator() getSelectTypeMap()source public
getSelectTypeMap( )
Возвращает класс TypeMap, в котором хранятся типы для каждого поля в выборке.
Возвращает
Cake\Database\TypeMapgetValueBinder()source public
getValueBinder( )
Возвращает текущий используемый экземпляр ValueBinder.
ValueBinder отвечает за создание плейсхолдеров запроса и временное связывание значений с этими плейсхолдерами, чтобы их можно было правильно передать объекту запроса.
Возвращает
Cake\Database\ValueBindergroup()source public
group( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite = false )
Добавляет одно или несколько полей, которые будут использоваться в условии GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.
По умолчанию эта функция добавляет любой переданный аргумент в список группируемых полей, если второй аргумент не установлен в true.
Примеры:
// Produces GROUP BY id, title
$query->group(['id', 'title']);
// Produces GROUP BY title
$query->group('title'); Поля группировки не подходят для использования с данными, введёнными пользователем, так как они не проверяются на безопасность.
Параметры
- array|
Cake\Database\ExpressionInterface|string$fields - поля, которые необходимо добавить в список
- boolean
$overwriteнеобязательный false - необходимо ли сбросить поля с переданным списком или нет
Возвращает
$this
having()source public
having( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )
Добавляет условие или набор условий, которые будут использоваться в HAVING условии для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.
Поля условия HAVING не подходят для использования с данными, введёнными пользователем, так как они не проверяются на безопасность.
Параметры
- string|array|
Cake\Database\ExpressionInterface|callable|null$conditionsнеобязательный null - Условия having.
- array
$typesнеобязательный [] - ассоциативный массив имён типов, используемых для привязки значений к запросу
- boolean
$overwriteнеобязательный false - необходимо ли сбросить условия с переданным списком или нет
Возвращает
$this
См. также
\Cake\Database\Query::where()identifier()source public
identifier( string $identifier )
Создаёт выражение, которое относится к идентификатору. Идентификаторы используются для указания имён полей и позволяют компилятору SQL применять кавычки или экранировать идентификатор.
Значение используется как есть, и вам может потребоваться использовать алиасы или включить ссылку на таблицу в идентификатор. Не используйте этот метод для вставки SQL-методов или логических утверждений.
Пример
$query->newExp()->lte('count', $query->identifier('total')); Параметры
- string
$identifier - Идентификатор для выражения
Возвращает
Cake\Database\ExpressionInterfaceinnerJoin()source public
innerJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )
Добавляет единственное условие INNER JOIN в запрос.
Это метод сокращенной записи для построения соединений через join().
Аргументы этого метода идентичны аргументам метода leftJoin() сокращенной записи, пожалуйста, обратитесь к описанию этого метода для получения дополнительных сведений.
Параметры
- строка|массив
$table - Таблица, с которой нужно произвести соединение
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательно [] Условия для соединения.
- массив
$typesнеобязательно [] список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
insert()source public
insert( array $columns , array $types = [] )
Создает запрос вставки.
Обратите внимание, что вызов этого метода сбросит любые данные, ранее заданные с помощью Query::values().
Параметры
- массив
$columns - Столбцы, в которые необходимо вставить данные.
- массив
$typesнеобязательно [] - Сопоставление столбцов и их типов данных.
Возвращает
$this
Исключения
RuntimeExceptionКогда количество столбцов равно 0.
into()source public
into( string $table )
Устанавливает имя таблицы для запросов вставки.
Параметры
- строка
$table - Имя таблицы для вставки.
Возвращает
$this
isBufferedResultsEnabled()source public
isBufferedResultsEnabled( )
Возвращает, включена ли буферизация результатов.
При включении результаты, возвращаемые этим запросом, будут буферизированы. Это позволяет итерировать набор результатов несколько раз или кэшировать и итерировать его.
При отключении это уменьшает потребление памяти, так как полученные результаты не запоминаются для будущих итераций.
Возвращает
booleanjoin()source public
join( array|string|null $tables = null , array $types = [] , boolean $overwrite = false )
Добавляет одну или несколько таблиц, которые будут использоваться как 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
Параметры
- массив|строка|null
$tablesнеобязательно null - список таблиц, которые нужно соединить в запросе
- массив
$typesнеобязательно [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
- булево
$overwriteнеобязательно false - нужно ли сбрасывать соединения с переданным списком или нет
Возвращает
$this|массив
См.
Cake\Database\TypeleftJoin()source public
leftJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )
Добавляет единственное 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() для получения дополнительных сведений о условиях и типах.
Параметры
- строка|массив
$table - Таблица, с которой нужно произвести соединение
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательно [] Условия для соединения.
- массив
$typesнеобязательно [] список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
limit()source public
limit( integer|Cake\Database\ExpressionInterface $num )
Устанавливает количество записей, которые должны быть извлечены из базы данных, принимает целое число или объект выражения, вычисляемый в целое число. В некоторых базах данных эта операция может быть не поддерживается или потребует преобразования запроса для ограничения размера набора результатов.
Примеры
$query->limit(10) // generates LIMIT 10 $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
Параметры
- целое число|
Cake\Database\ExpressionInterface$num - количество записей для возврата
Возвращает
$this
modifier()source public
modifier( array|Cake\Database\ExpressionInterface|string $modifiers , boolean $overwrite = false )
Добавляет один или несколько SELECT модификаторов, которые будут использоваться в SELECT.
По умолчанию эта функция добавляет любой переданный аргумент в список применяемых модификаторов, если второй аргумент не установлен в true.
Пример:
// Ignore cache query in MySQL
$query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
// It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
// Or with multiple modifiers
$query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
// It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products Параметры
- массив|
Cake\Database\ExpressionInterface|строка$modifiers - модификаторы, которые должны быть применены к запросу
- булево
$overwriteнеобязательно false - нужно ли сбрасывать порядок со списком полей или нет
Возвращает
$this
newExpr()source public
newExpr( mixed $rawExpression = null )
Возвращает новый объект 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 Параметры
- смешанный
$rawExpressionнеобязательно null - Строка, массив или что-либо, что вы хотите обернуть в объект выражения
Возвращает
Cake\Database\Expression\QueryExpressionoffset()source public
offset( integer|Cake\Database\ExpressionInterface $num )
Устанавливает количество записей, которые следует пропустить из исходного набора результатов. Это обычно используется для постраничного отображения больших результатов. Принимает целое число или объект выражения, вычисляемый в целое число.
В некоторых базах данных эта операция может быть не поддерживается или потребуется преобразование запроса для ограничения размера набора результатов.
Примеры
$query->offset(10) // generates OFFSET 10 $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
Параметры
- целое число|
Cake\Database\ExpressionInterface$num - количество записей для пропуска
Возвращает
$this
orHaving()source public устаревшее
orHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определенный набор условий к предоставленному списку, используя оператор ИЛИ в условии HAVING. Этот метод работает точно так же, как метод orWhere(). Обратитесь к его документации, чтобы понять, как использовать каждый параметр.
Поля HAVING не подходят для использования с данными, предоставленными пользователем, поскольку они не очищаются создателем запросов.
Устаревшее
3.5.0 Этот метод создает сложные SQL-запросы, основанные на текущем состоянии запроса. Используйте Query::having() вместо него, так как он имеет более предсказуемое и понятное поведение.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|вызов$conditions - Условие ИЛИ для HAVING.
- массив
$typesнеобязательно [] - ассоциативный массив имен типов, используемых для привязки значений к запросу.
Возвращает
$this
См.
\Cake\Database\Query::orWhere()orWhere()source public устаревшее
orWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types = [] )
Подключает любой ранее определённый набор условий к предоставленному списку, используя оператор ИЛИ. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.
Важно отметить, что при вызове этой функции любой ранее заданный набор условий для этого запроса будет обрабатываться как один аргумент для оператора ИЛИ. Эта функция будет работать не только с последним определённым условием, но и со всеми условиями в целом.
При использовании массива для определения условий, создание ограничений для каждой записи массива будет использовать ту же логику, что и с функцией where(). Это означает, что каждая запись массива будет соединена с другой, используя оператор ИЛИ, если вы не вложите условия в массив, используя другой оператор.
Примеры:
$query->where(['title' => 'Hello World')->orWhere(['title' => 'Foo']);
Результат:
WHERE title = 'Hello World' OR title = 'Foo'
$query ->where(['OR' => ['published' => false, 'published is NULL']]) ->orWhere(['author_id' => 1, 'comments_count >' => 10])
Результат:
WHERE (published = 0 OR published IS NULL) OR (author_id = 1 AND comments_count > 10)
$query
->where(['title' => 'Foo'])
->orWhere(function ($exp, $query) {
return $exp
->or_(['author_id' => 1])
->add(['author_id' => 2]);
}); Создаёт следующие условия:
WHERE (title = 'Foo') OR (author_id = 1 OR author_id = 2)
Устаревшее
3.5.0 Этот метод создаёт труднопредсказуемый SQL на основе текущего состояния запроса. Используйте Query::where() вместо него, так как он имеет более предсказуемое и понятное поведение.
Параметры
- строка|массив|
Cake\Database\ExpressionInterface|обратный вызов$conditions - Условия для добавления с ИЛИ.
- массив
$typesнеобязательно [] - ассоциативный массив имен типов, используемых для привязки значений к запросу
Возвращает
$this
См. также
\Cake\Database\Query::where()Cake\Database\Typeorder()source public
order( array|Cake\Database\ExpressionInterface|callable|string $fields , boolean $overwrite = false )
Добавляет одно или несколько полей, которые будут использованы в предложении ORDER для этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передаётся массив, ключи будут использоваться в качестве поля, а значение будет представлять порядок, в котором это поле должно быть упорядочено. При многократном вызове с одними и теми же полями в качестве ключа, последнее определение порядка будет преобладать над другими.
По умолчанию эта функция добавляет любой переданный аргумент к списку полей, которые должны быть выбраны, если второй аргумент не установлен в true.
Примеры:
$query->order(['title' => 'DESC', 'author_id' => 'ASC']);
Результат:
ORDER BY title DESC, author_id ASC
$query->order(['title' => 'DESC NULLS FIRST'])->order('author_id'); Сгенерирует:
ORDER BY title DESC NULLS FIRST, author_id
$expression = $query->newExpr()->add(['id % 2 = 0']); $query->order($expression)->order(['title' => 'ASC']);
и
$query->order(function ($exp, $query) {
return [$exp->add(['id % 2 = 0']), 'title' => 'ASC'];
}); Оба станут:
ORDER BY (id %2 = 0), title ASC
Поля/направления упорядочивания не проверяются обработчиком запросов. При передаче данных, вводимых пользователем, в order(), необходимо использовать белый список полей/направлений.
Если вам нужно задать сложные выражения в качестве условий упорядочивания, вы должны использовать orderAsc() или orderDesc().
Параметры
- массив|
Cake\Database\ExpressionInterface|обратный вызов|строка$fields - поля, которые нужно добавить в список
- логическое
$overwriteнеобязательно false - нужно ли сбросить порядок списка полей или нет
Возвращает
$this
orderAsc()source public
orderAsc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )
Добавляет предложение ORDER BY со значением ASC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()
Поля сортировки не подходят для использования с данными, вводимыми пользователем, поскольку они не проверяются обработчиком запросов.
Параметры
- строка|
Cake\Database\Expression\QueryExpression$field - Поле, по которому нужно отсортировать.
- логическое
$overwriteнеобязательно false - Нужно ли сбросить предложения сортировки.
Возвращает
$this
orderDesc()source public
orderDesc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite = false )
Добавляет предложение ORDER BY со значением DESC.
Этот метод позволяет задавать сложные выражения в качестве условий сортировки, в отличие от order()
Поля сортировки не подходят для использования с данными, вводимыми пользователем, поскольку они не проверяются обработчиком запросов.
Параметры
- строка|
Cake\Database\Expression\QueryExpression$field - Поле, по которому нужно отсортировать.
- логическое
$overwriteнеобязательно false - Нужно ли сбросить предложения сортировки.
Возвращает
$this
page()source public
page( integer $num , integer|null $limit = null )
Устанавливает страницу результатов, которую вы хотите получить.
Этот метод предоставляет более простой в использовании интерфейс для установки limit + offset в наборе записей, которые вы хотите получить в качестве результатов. Если пусто, limit будет по умолчанию равен существующему ограничению, а если и оно пусто, то будет использоваться 25. Страницы должны начинаться с 1.
Параметры
- целое число
$num - Номер страницы, которую вы хотите получить.
- целое число|null
$limitнеобязательно null Количество строк, которое вы хотите получить на странице. Если null, будет использоваться текущее ограничение.
Возвращает
$this
Выбрасывает
InvalidArgumentExceptionЕсли номер страницы < 1.
removeJoin()source public
removeJoin( string $name )
Удаляет объединение, если оно было определено.
Полезно при повторном определении объединений или при необходимости изменить порядок предложений объединения.
Параметры
- строка
$name - Псевдоним/имя объединения, которое нужно удалить.
Возвращает
$this
rightJoin()source public
rightJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions = [] , array $types = [] )
Добавляет одиночное предложение RIGHT JOIN к запросу.
Это сокращённый метод для построения объединений с помощью join().
Аргументы этого метода идентичны сокращённому методу leftJoin(), обратитесь к описанию этого метода для получения дополнительных сведений.
Параметры
- строка|массив
$table - Таблица для объединения
- строка|массив|
Cake\Database\ExpressionInterface$conditionsнеобязательно [] Условия для объединения.
- массив
$typesнеобязательно [] Список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.
Возвращает
$this
rowCountAndClose()source public
rowCountAndClose( )
Выполняет SQL-запрос и сразу закрывает оператор перед возвратом количества строк, изменённых в результате выполнения.
Этот метод может использоваться с запросами UPDATE и DELETE, но не рекомендуется для запросов SELECT и не используется для подсчёта записей.
Пример
$rowCount = $query->update('articles')
->set(['published'=>true])
->where(['published'=>false])
->rowCountAndClose(); В приведённом выше примере столбец published будет изменён на true для всех записей с false и будет возвращено количество обновлённых записей.
Возвращает
целое числоselect()source public
select( array|Cake\Database\ExpressionInterface|string|callable $fields = [] , boolean $overwrite = false )
Добавляет новые поля, которые будут возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы в виде массива строк, массива объектов выражений, одного выражения или одной строки.
Если передаётся массив, ключи будут использоваться для псевдонимизации полей, используя значение как фактическое поле, которое должно быть псевдонимизировано. Можно псевдонимизировать строки, объекты выражений или даже другие объекты 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\Database\ExpressionInterface|строка|обратный вызов$fieldsнеобязательно [] - поля, которые нужно добавить в список.
- логическое
$overwriteнеобязательно false - нужно ли сбросить поля переданным списком или нет
Возвращает
$this
selectTypeMap()source public устаревшее
selectTypeMap( Cake\Database\TypeMap $typeMap = null )
Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.
При вызове без аргументов возвращается текущий объект TypeMap.
Устаревшее
3.4.0 Используйте setSelectTypeMap()/getSelectTypeMap() вместо этого.Параметры
-
Cake\Database\TypeMap$typeMapнеобязательно null - Объект карты, который нужно использовать
Возвращает
$this|\Cake\Database\TypeMap
set()source public
set( string|array|callable|Cake\Database\Expression\QueryExpression $key , mixed $value = null , array $types = [] )
Установите одно или несколько полей для обновления.
Примеры
Передача строки:
$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\QueryExpression$key Имя столбца или массив ключей + значений для установки. Также может быть объект QueryExpression, содержащий фрагмент SQL. Также может быть вызов функции, который должен возвращать объект выражения.
- смешанный
$valueнеобязательно null Значение для обновления $key. Может быть null, если $key — массив или QueryExpression. Если $key — массив, этот параметр будет использован как $types.
- массив
$typesнеобязательно [] - Типы столбцов для обработки данных.
Возвращает
$this
setConnection()source public
setConnection( Cake\Database\Connection $connection )
Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования запроса.
Параметры
-
Cake\Database\Connection$connection - Экземпляр подключения
Возвращает
$this
setSelectTypeMap()source public
setSelectTypeMap( Cake\Database\TypeMap $typeMap )
Устанавливает класс TypeMap, где хранятся типы для каждого поля в выборке.
Параметры
-
Cake\Database\TypeMap$typeMap - Объект карты для использования
Возвращает
$this
setValueBinder()source public
setValueBinder( Cake\Database\ValueBinder|boolean $binder )
Перезаписывает текущий связующий объект значений.
ValueBinder отвечает за генерацию заглушек запроса и временное связывание значений с этими заглушками, чтобы они могли быть правильно переданы объекту оператора.
Параметры
- Cake\Database\ValueBinder|boolean
$binder - Связующий объект или false для отключения связывания.
Возвращает
$this
sql()source public
sql( Cake\Database\ValueBinder $generator = null )
Возвращает строковое представление SQL этого объекта.
Эта функция скомпилирует этот запрос, чтобы сделать его совместимым с диалектом SQL, используемым подключением. Этот процесс может добавлять, удалять или изменять любую часть запроса или внутреннее выражение, чтобы сделать его исполняемым в целевой платформе.
Полученный запрос может содержать заглушки, которые будут заменены фактическими значениями при выполнении запроса, поэтому его лучше использовать с подготовленными операторами.
Параметры
- Cake\Database\ValueBinder
$generatorнеобязательно null Объект заглушки, который будет содержать связанные значения для выражений
Возвращает
строкаРеализация
Cake\Database\ExpressionInterface::sql() traverse()source public
traverse( callable $visitor , array $parts = [] )
Перебирает каждую указанную часть. Функции обхода могут агрегировать результаты с помощью переменных в замыкании или переменных экземпляра. Эта функция обычно используется для обхода всех частей запроса, которые будут использованы для построения запроса.
Обратный вызов получит 2 параметра: первое — значение части запроса, по которой происходит итерация, а второе — имя этой части.
Пример:
$query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
if ($clause === 'select') {
var_dump($value);
}
}, ['select', 'from']); Параметры
- вызов функции
$visitor - Функция или вызываемая функция, которая будет выполняться для каждой части
- массив
$partsнеобязательно [] - Клаузы запроса для обхода
Возвращает
$this
Реализация
Cake\Database\ExpressionInterface::traverse() traverseExpressions()source public
traverseExpressions( callable $callback )
Эта функция работает аналогично функции traverse(), с той разницей, что она выполняет полный обход дерева выражений. Она выполнит предоставленную функцию обратного вызова для каждого объекта ExpressionInterface, хранящегося внутри этого запроса на любой глубине вложения в любой части запроса.
Обратный вызов получит в качестве первого параметра текущее посещаемое выражение.
Параметры
- вызов функции
$callback Функция, которая будет выполняться для каждого найденного объекта ExpressionInterface внутри этого запроса.
Возвращает
$this|null
type()source public
type( )
Возвращает тип этого запроса (выборка, вставка, обновление, удаление).
Возвращает
строкаunion()source public
union( string|Cake\Database\Query $query , boolean $overwrite = false )
Добавляет завершенный запрос, который будет использоваться вместе с оператором 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$query - полный SQL запрос, который будет использоваться в операторе UNION
- логическое значение
$overwriteнеобязательно false - нужно ли обнулить список запросов для операции или нет
Возвращает
$this
unionAll()source public
unionAll( string|Cake\Database\Query $query , boolean $overwrite = false )
Добавляет завершенный запрос, который будет использован в сочетании с оператором 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$query - полный SQL запрос, который будет использован в операторе UNION
- логическое значение
$overwriteнеобязательно false - нужно ли обнулить список запросов для операции или нет
Возвращает
$this
update()source public
update( string|Cake\Database\ExpressionInterface $table )
Создать запрос на обновление.
Может быть объединен с методами set() и where(), чтобы создать запросы на обновление.
Параметры
- строка|
Cake\Database\ExpressionInterface$table - Таблица, которую нужно обновить.
Возвращает
$this
valueBinder()source public deprecated
valueBinder( Cake\Database\ValueBinder|false|null $binder = null )
Возвращает текущий используемый экземпляр ValueBinder. Если передано значение, оно будет установлено как новый экземпляр для использования.
ValueBinder отвечает за генерацию заглушек запроса и временное связывание значений с этими заглушками, чтобы они могли быть корректно переданы объекту оператора.
Устарело
3.5.0 Используйте setValueBinder()/getValueBinder() вместо этого.Параметры
- Cake\Database\ValueBinder|false|null
$binderнеобязательно null новый экземпляр для установки. Если значение не передано, будет возвращён по умолчанию
Возвращает
$this|\Cake\Database\ValueBinder
values()source public
values( array|Cake\Database\Query $data )
Устанавливает значения для запроса вставки.
Многократные вставки могут быть выполнены, вызвав values() несколько раз или передав массив наборов значений. Кроме того, $data может быть объектом Query для вставки данных из другого запроса SELECT.
Параметры
- массив|
Cake\Database\Query$data - Данные для вставки.
Возвращает
$this
Исключения
Cake\Database\Exceptionесли вы попытаетесь установить значения до объявления столбцов. Или если вы попытаетесь установить значения в не-запросах на вставку.
where()source public
where( string|array|Cake\Database\ExpressionInterface|callable|null $conditions = null , array $types = [] , boolean $overwrite = false )
Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нём, значения для массива будут использованы для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.
При использовании массивов каждая запись будет присоединена к остальным условиям с помощью оператора AND. Последовательные вызовы этой функции также будут объединять новые условия, используя оператор AND. Кроме того, значения могут быть выражены с помощью объектов выражений, которые могут включать и другие объекты запросов.
Любые условия, созданные с помощью этих методов, могут быть использованы с любыми запросами типа SELECT, UPDATE и DELETE.
Условия с использованием операторов:
$query->where([
'posted >=' => new DateTime('3 days ago'),
'title LIKE' => 'Hello W%',
'author_id' => 1,
], ['posted' => 'datetime']); Предыдущий пример генерирует:
WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1
Второй параметр используется для указания ожидаемого типа для каждого переданного ключа. Допустимые типы можно использовать из сопоставленного с классом Database\Type.
Вложение условий с союзами:
$query->where([
'author_id !=' => 1,
'OR' => ['published' => true, 'posted <' => new DateTime('now')],
'NOT' => ['title' => 'Hello']
], ['published' => boolean, 'posted' => 'datetime'] Предыдущий пример генерирует:
WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')
Вы можете вкладывать условия с помощью союзов сколько угодно. Иногда вам может потребоваться определить 2 различных варианта для одного ключа, в этом случае вы можете обернуть каждое условие в новый массив:
$query->where(['OR' => [['published' => false], ['published' => true]])
Что приведет к:
WHERE (published = false) OR (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\ExpressionInterface|вызываемая функция|null$conditionsнеобязательно null - Условия для фильтрации.
- массив
$typesнеобязательно [] - ассоциативный массив имён типов, используемых для привязки значений к запросу
- булево
$overwriteнеобязательно false - нужно ли сбросить условия с переданным списком или нет
Возвращает
$this
См. также
Cake\Database\TypeCake\Database\Expression\QueryExpressionwhereInList()source public
whereInList( string $field , array $values , array $options = [] )
Добавляет условие IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод позволяет использовать пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки ввода.
Опции: - types - Ассоциативный массив имён типов, используемых для привязки значений к запросу - allowEmpty - Разрешить пустой массив.
Параметры
- строка
$field - Поле
- массив
$values - Массив значений
- массив
$optionsнеобязательно [] - Опции
Возвращает
$this
whereNotInList()source public
whereNotInList( string $field , array $values , array $options = [] )
Добавляет условие NOT IN или набор условий, которые будут использоваться в предложении WHERE для этого запроса.
Этот метод позволяет использовать пустые входные данные в отличие от where(), если вы установите 'allowEmpty' в true. Будьте осторожны при использовании без надлежащей проверки ввода.
Параметры
- строка
$field - Поле
- массив
$values - Массив значений
- массив
$optionsнеобязательно [] - Опции
Возвращает
$this
whereNotNull()source public
whereNotNull( array|string|Cake\Database\ExpressionInterface $fields )
Удобный метод, который добавляет условие NOT NULL в запрос
Параметры
- массив|строка|
Cake\Database\ExpressionInterface$fields - Одно поле или выражения или список из них, которые не должны быть null
Возвращает
$this
whereNull()source public
whereNull( array|string|Cake\Database\ExpressionInterface $fields )
Удобный метод, который добавляет условие IS NULL в запрос
Параметры
- массив|строка|
Cake\Database\ExpressionInterface$fields - Одно поле или выражения или список из них, которые должны быть null
Возвращает
$this
Методы, используемые из Cake\Database\TypeMapTrait
defaultTypes()source public устарело
defaultTypes( array $types = null )
Разрешает устанавливать типы по умолчанию при цепочечном запросе
Устарело
3.4.0 Используйте setDefaultTypes()/getDefaultTypes() вместо этого.Параметры
- массив
$typesнеобязательно null - Массив типов для установки.
Возвращает
$this|массив
getDefaultTypes()source public
getDefaultTypes( )
Возвращает типы по умолчанию текущей карты типов.
Возвращает
массивgetTypeMap()source public
getTypeMap( )
Возвращает существующую карту типов.
Возвращает
Cake\Database\TypeMapsetDefaultTypes()source public
setDefaultTypes( array $types )
Переопределяет сопоставления типов по умолчанию для полей в реализующем объекте.
Этот метод полезен, если вам нужно задать сопоставления типов, которые совместно используются в нескольких функциях/выражениях в запросе.
Чтобы добавить значение по умолчанию без переопределения существующих, используйте getTypeMap()->addDefaults()
Параметры
- массив
$types - Массив типов для установки.
Возвращает
$this
См. также
\Cake\Database\TypeMap::setDefaults()setTypeMap()source public
setTypeMap( array|Cake\Database\TypeMap $typeMap )
Создаёт новую карту типов, если $typeMap является массивом, иначе меняет её на заданную.
Параметры
- массив|
Cake\Database\TypeMap$typeMap - Создаёт карту типов, если массив, иначе устанавливает заданную карту типов
Возвращает
$this
typeMap()source public устарело
typeMap( array|Cake\Database\TypeMap|null $typeMap = null )
Создаёт новую карту типов, если $typeMap является массивом, иначе возвращает существующую карту типов или меняет её на заданную.
Устарело
3.4.0 Используйте setTypeMap()/getTypeMap() вместо этого.Параметры
- массив|
Cake\Database\TypeMap|null$typeMapнеобязательно null - Создаёт карту типов, если массив, иначе устанавливает заданную карту типов
Возвращает
$this|\Cake\Database\TypeMap
Подробности свойств
$_connectionsource
protected Cake\Database\Connection
Экземпляр подключения, который будет использоваться для выполнения этого запроса.
$_dirtysource
protected boolean
Указывает, было ли изменено внутреннее состояние этого запроса. Это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненную инструкцию.
false
$_functionsBuildersource
protected Cake\Database\FunctionsBuilder|null
Экземпляр объекта-строителя функций, используемого для создания произвольных SQL-функций.
$_iteratorsource
protected Cake\Database\StatementInterface|null
Объект запроса, полученный в результате выполнения этого запроса.
$_partssource
protected array
Список SQL-частей, которые будут использованы для построения этого запроса.
[
'delete' => true,
'update' => [],
'set' => [],
'insert' => [],
'values' => [],
'select' => [],
'distinct' => false,
'modifier' => [],
'from' => [],
'join' => [],
'where' => null,
'group' => [],
'having' => null,
'order' => null,
'limit' => null,
'offset' => null,
'union' => [],
'epilog' => null
] $_resultDecoratorssource
protected array
Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующего набора данных при извлечении. Каждая функция обратного вызова будет получать массив строк в качестве первого аргумента.
[]
$_useBufferedResultssource
protected boolean
Флаг булевого типа для отслеживания включения/выключения буферизации результатов.
true
$_valueBindersource
protected Cake\Database\ValueBinder|null
Объект, ответственный за создание заглушек запроса и временное хранение значений, связанных с каждой из этих заглушек.
© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/3.8/class-Cake.Database.Query.html