Spec-Zone.ru › CakePHP 3.3

Класс Query

Этот класс представляет SQL-запрос к реляционной базе данных. Запрос может быть различных типов, таких как выборка, обновление, вставка и удаление. Предоставляет методы для динамического построения каждой части запроса, его выполнения и преобразования в конкретный диалект SQL.

Cake\Database\Query реализует Cake\Database\ExpressionInterface, IteratorAggregate использует Cake\Database\TypeMapTrait

Прямые подклассы

  • Cake\ORM\Query
Пространство имен: Cake\Database
Расположение: Database/Query.php

Краткое описание свойств

  • $_connection protected
    Cake\Datasource\ConnectionInterface
    Экземпляр подключения, используемый для выполнения запроса.
  • $_dirty protected
    boolean

    Указывает, было ли изменено внутреннее состояние запроса. Это используется для удаления кэшированных внутренних объектов, таких как преобразованный запрос или ссылка на выполненную инструкцию.

  • $_functionsBuilder protected
    Cake\Database\FunctionsBuilder
    Экземпляр объекта-строителя функций, используемый для генерации произвольных SQL-функций.
  • $_iterator protected
    Cake\Database\StatementInterface
    Объект инструкции, полученный в результате выполнения запроса.
  • $_parts protected
    array
    Список SQL-частей, которые будут использоваться для построения запроса.
  • $_resultDecorators protected
    array

    Список функций обратного вызова, которые будут вызваны для изменения каждой строки из результирующей инструкции при извлечении. Каждая функция обратного вызова получит массив строки в качестве первого аргумента.

  • $_selectTypeMap protected
    Cake\Database\TypeMap
    Карта типов для полей в предложении SELECT
  • $_type protected
    string
    Тип этого запроса (выборка, вставка, обновление, удаление).
  • $_typeCastAttached protected
    boolean
    Флаг отслеживания, чтобы добавить только один преобразователь типа.
  • $_useBufferedResults protected
    boolean

    Булево значение для отслеживания, включены ли буферизованные результаты.

  • $_valueBinder protected
    Cake\Database\ValueBinder

    Объект, отвечающий за генерацию значений-заменителей запроса и временное хранение значений, связанных с каждым из них.

Унаследованные свойства

  • _typeMap

Краткое описание методов

  • __clone() public
    Глубокое клонирование этого объекта.
  • __construct() public
    Конструктор.
  • __debugInfo() public

    Возвращает массив, который можно использовать для описания внутреннего состояния этого объекта.

  • __toString() public
    Возвращает строковое представление этого запроса (полное SQL-выражение).
  • _conjugate() protected
    Вспомогательная функция, используемая для построения условий путем составления объектов QueryExpression.
  • _decorateStatement() protected

    Вспомогательная функция, используемая для обертывания исходного оператора из драйвера любыми зарегистрированными обратными вызовами.

  • _dirty() protected

    Помечает запрос как изменённый, удаляя любые предварительно обработанные данные из кэша в памяти.

  • _makeJoin() protected
    Возвращает массив, который можно передать методу join, описывающему одну фразу JOIN.
  • andHaving() public

    Подключает любой ранее определённый набор условий к предоставленному списку с помощью оператора AND в части HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.

  • andWhere() public

    Подключает любой ранее определённый набор условий к предоставленному списку с помощью оператора AND. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, обратные вызовы или строки.

  • bind() public
    Связывает заполнитель запроса со значением и типом.
  • bufferResults() public
    Включить/отключить буферизованные результаты.
  • clause() public

    Возвращает данные, которые были сохранены в указанной фразе. Это полезно для изменения любой внутренней части запроса, и SQL-диалекты используют это для преобразования запроса перед его выполнением. Допустимые фразы, которые можно получить: delete, update, set, insert, values, select, distinct, from, join, set, where, group, having, order, limit, offset и union.

  • connection() public

    Устанавливает экземпляр соединения, который будет использоваться для выполнения и преобразования этого запроса. При вызове с нулевым аргументом он вернёт текущий экземпляр соединения.

  • decorateResults() public

    Регистрирует обратный вызов, который будет выполняться для каждого результата, извлечённого из набора результатов. Обратный вызов получит в качестве первого параметра массив с сырыми данными из базы данных для каждой строки, которая извлекается, и должен вернуть строку с любыми возможными изменениями.

  • delete() public
    Создать запрос DELETE.
  • distinct() public

    Добавляет фрагмент DISTINCT в запрос, чтобы удалить дубликаты из набора результатов. Эта фраза может быть использована только для запросов SELECT.

  • epilog() public
    Строка или выражение, которое будет добавлено к сгенерированному запросу
  • execute() public

    Компилирует SQL-представление этого запроса и выполняет его с использованием объекта соединения, сконфигурированного в приложении. Возвращает объект результирующего оператора.

  • from() public

    Добавляет одну или несколько таблиц, которые будут использоваться в фразе FROM для этого запроса. Таблицы могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • func() public

    Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных SQL-функций.

  • getIterator() public

    Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать по запросу без необходимости ручного вызова execute(), делая его похожим на набор результатов вместо самого запроса.

  • group() public

    Добавляет одно или несколько полей, которые будут использоваться в фразе GROUP BY для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • having() public

    Добавляет условие или набор условий, которые будут использоваться в фразе HAVING для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.

  • innerJoin() public
    Добавляет одну фразу INNER JOIN в запрос.
  • insert() public
    Создать запрос INSERT.
  • into() public
    Устанавливает имя таблицы для запросов INSERT.
  • join() public

    Добавляет одну или несколько таблиц, которые будут использоваться в качестве фраз JOIN для этого запроса. Таблицы могут быть переданы как массив строк, массив, описывающий части join, массив с несколькими описаниями join или одна строка.

  • leftJoin() public
    Добавляет одну фразу LEFT JOIN в запрос.
  • limit() public

    Устанавливает количество записей, которое должно быть получено из базы данных; принимает целое число или объект выражения, который вычисляется в целое число. В некоторых базах данных эта операция может не поддерживаться или потребует преобразования запроса для ограничения размера набора результатов.

  • modifier() public
    Добавляет одну или несколько модификаций SELECT, которые будут использованы в SELECT.
  • newExpr() public

    Возвращает новый объект QueryExpression. Это полезная функция при создании сложных запросов с использованием интерфейса fluent. Вы также можете переопределить эту функцию в подклассах для использования специализированного класса QueryExpression, если это необходимо.

  • offset() public

    Устанавливает количество записей, которые нужно пропустить из исходного набора результатов. Это обычно используется для постраничного отображения больших результатов. Принимает целое число или объект выражения, который вычисляется в целое число.

  • orHaving() public

    Подключает любой ранее определённый набор условий к предоставленному списку с помощью оператора OR в части HAVING. Этот метод работает точно так же, как метод orWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.

  • orWhere() public

    Подключает любой ранее определённый набор условий к предоставленному списку с помощью оператора OR. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, обратные вызовы или строки.

  • order() public

    Добавляет одно или несколько полей, которые будут использоваться в фразе ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • orderAsc() public
    Добавить фрагмент ORDER BY с направлением ASC.
  • orderDesc() public
    Добавить фрагмент ORDER BY с направлением DESC.
  • page() public
    Установить страницу результатов, которую вы хотите.
  • removeJoin() public
    Удалить join, если он был определён.
  • rightJoin() public
    Добавить одну фразу RIGHT JOIN в запрос.
  • select() public

    Добавляет новые поля, которые будут возвращены оператором SELECT при выполнении этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, одно выражение или одна строка.

  • selectTypeMap() public

    Устанавливает класс TypeMap, где хранятся типы для каждого поля в фразе select.

END_OF_DOCUMENT_MARKER
  • set() 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() public

    Возвращает текущий используемый экземпляр ValueBinder. Если передано значение, оно будет установлено как новый используемый экземпляр.

  • values() public
    Устанавливает значения для запроса вставки.
  • where() public

    Добавляет условие или набор условий, которые будут использоваться в предложении WHERE для этого запроса. Условия могут быть выражены как массив полей в качестве ключей с операторами сравнения в нём, значения для массива будут использоваться для сравнения поля с таким литералом. Наконец, условия могут быть выражены как одна строка или массив строк.

Подробное описание методов

__clone()source public

__clone( )

Выполняет глубокое клонирование этого объекта.

Клонирует все объекты выражений, используемые в каждом из разделов, а также valueBinder.

__construct()source public

__construct( Cake\Datasource\ConnectionInterface $connection )

Конструктор.

Параметры

Cake\Datasource\ConnectionInterface $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, описывающему отдельное условие соединения

Параметры

строка|массив $table
Таблица, с которой нужно выполнить соединение
строка|массив|Cake\Database\ExpressionInterface $conditions

Условия, которые нужно использовать для соединения.

строка $type
тип соединения, которое нужно использовать

Возвращает

массив

andHaving()source public

andHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )

Подключает любой ранее определённый набор условий к предоставленному списку с использованием оператора AND в предложении HAVING. Этот метод работает точно так же, как метод andWhere(). Обратитесь к его документации, чтобы получить представление о том, как использовать каждый параметр.

Параметры

строка|массив|Cake\Database\ExpressionInterface|обратный вызов $conditions
Условие AND для HAVING.
массив $types optional []
ассоциативный массив имён типов, используемых для привязки значений к запросу

Возвращает


$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
      ->add(['author_id' => 1])
      ->or_(['author_id' => 2]);
  });

Генерирует следующие условия:

WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)

Параметры

строка|массив|Cake\Database\ExpressionInterface|обратный вызов $conditions
Условия, которые нужно добавить с AND.
массив $types optional []
ассоциативный массив имён типов, используемых для привязки значений к запросу

Возвращает


$this

См. также

\Cake\Database\Query::where()
Cake\Database\Type

bind()source public

bind( string|integer $param , mixed $value , string|integer $type 'string' )

Связывает заполнитель запроса со значением и типом.

Если тип выражен как "atype[]" (обратите внимание на фигурные скобки), это заставит заполнитель динамически переписываться, поэтому, если значение является массивом, он создаст столько же заполнителей, сколько значений в нём. Например:

$query->bind(':id', [1, 2, 3], 'int[]');

Создаст 3 целочисленных заполнителя. При использовании именованных заполнителей этот метод требует, чтобы заполнители включали : например :value.

Параметры

строка|целое число $param

заполнитель, который должен быть заменён цитированной версией $value

смешанное $value
Значение, которое нужно привязать
строка|целое число $type optional 'string'

название отображаемого типа, используемое для приведения к типу при отправке в базу данных

Возвращает


$this

bufferResults()source public

bufferResults( boolean|null $enable null )

Включить/выключить буферизацию результатов.

При включенной буферизации результаты, возвращаемые этим запросом, будут буферизованы. Это позволяет вам многократно итерировать результат, а также кэшировать и итерировать его.

При выключенной буферизации будет потребляться меньше памяти, так как полученные результаты не будут запоминаться для будущих итераций.

Если вызов не содержит аргументов, он вернёт значение, включена ли буферизация.

Параметры

boolean|null $enable необязательно 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: строка Имя таблицы для обновления
  • 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

connection()source public

connection( Cake\Datasource\ConnectionInterface|null $connection null )

Устанавливает экземпляр подключения, который будет использоваться для выполнения и преобразования этого запроса. При вызове с аргументом null, он вернёт текущий экземпляр подключения.

Параметры

Cake\Datasource\ConnectionInterface|null $connection необязательно null
экземпляр

Возвращает


$this|\Cake\Datasource\ConnectionInterface

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 $overwrite необязательно false
Добавить или заменить все существующие декораторы.

Возвращает


$this

delete()source public

delete( string|null $table null )

Создать запрос на удаление.

Можно комбинировать с from(), where() и другими методами для создания запросов на удаление со специфическими условиями.

Параметры

string|null $table необязательно null
Таблица, используемая при удалении.

Возвращает


$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

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');

Параметры

string|Cake\Database\Expression\QueryExpression|null $expression необязательно null
выражение для добавления

Возвращает


$this

execute()source public

execute( )

Компилирует SQL-представление этого запроса и выполняет его с помощью объекта подключение. Возвращает получившийся объект оператора.

Выполнение запроса включает в себя несколько этапов. Сначала диалект подключения преобразует этот объект в соответствии со своей спецификой, что может привести к генерации другого объекта запроса, который будет фактически выполнен. Сразу после этого литеральные значения передаются подключению, чтобы безопасно привязать их к запросу. Наконец, результат оформляется с помощью пользовательских объектов, чтобы выполнить обратные вызовы для каждой полученной строки при необходимости.

Полученный оператор итерируемый, поэтому он может быть использован в любом цикле как массив.

Этот метод может быть переопределён в подклассах запросов для оформления поведения во время выполнения запроса.

Возвращает

Cake\Database\StatementInterface

from()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

func()source public

func( )

Возвращает экземпляр объекта-строителя функций, который можно использовать для генерации произвольных функций SQL.

Пример:

$query->func()->count('*');
$query->func()->dateDiff(['2012-01-05', '2012-01-02'])

Возвращает

Cake\Database\FunctionsBuilder

getIterator()source public

getIterator( )

Выполняет этот запрос и возвращает итератор результатов. Эта функция необходима для реализации интерфейса IteratorAggregate и позволяет итерировать запрос без необходимости вызова execute() вручную, делая его похожим на набор результатов, а не на сам запрос.

Возвращает

Iterator

Реализация

IteratorAggregate::getIterator()
END_OF_DOCUMENT_MARKER

group()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');

Параметры

массив|Cake\Database\ExpressionInterface|строка $fields
Поля, которые нужно добавить в список
логическое $overwrite необязательно false
Необходимо ли сбросить поля с переданным списком

Возвращает


$this

having()source public

having( string|array|Cake\Database\ExpressionInterface|callable|null $conditions null , array $types [] , boolean $overwrite false )

Добавляет условие или набор условий, которые будут использоваться в предложении HAVING для этого запроса. Этот метод работает точно так же, как метод where(). Обратитесь к его документации, чтобы узнать, как использовать каждый параметр.

Параметры

строка|массив|Cake\Database\ExpressionInterface|обратный вызов|null $conditions необязательно null
Условия HAVING.
массив $types необязательно []
Ассоциативный массив имен типов, используемых для привязки значений к запросу
логическое $overwrite необязательно false
Необходимо ли сбросить условия с переданным списком

Возвращает


$this

См. также

\Cake\Database\Query::where()

innerJoin()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

join()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'])`` will produceINNER 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\Type

leftJoin()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\QueryExpression
END_OF_DOCUMENT_MARKER

offset()source public

offset( integer|Cake\Database\ExpressionInterface $num )

Устанавливает количество записей, которые должны быть пропущены из исходного набора результатов. Это обычно используется для постраничного отображения больших результатов. Принимает целое число или объект выражения, который вычисляется в целое число.

В некоторых базах данных эта операция может быть не поддерживается или потребует преобразования запроса для ограничения размера набора результатов.

Примеры

$query->offset(10) // generates OFFSET 10
$query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)

Параметры

integer|Cake\Database\ExpressionInterface $num
количество записей для пропуска

Возвращает


$this

orHaving()source public

orHaving( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )

Подключает любой ранее определенный набор условий к предоставленному списку с помощью оператора OR в предложении HAVING. Этот метод работает точно так же, как метод orWhere(). Обратитесь к его документации за информацией о том, как использовать каждый параметр.

Параметры

string|array|Cake\Database\ExpressionInterface|callable $conditions
Условия OR для HAVING.
array $types optional []
ассоциативный массив имен типов, используемый для привязки значений к запросу.

Возвращает


$this

См. также

\Cake\Database\Query::orWhere()

orWhere()source public

orWhere( string|array|Cake\Database\ExpressionInterface|callable $conditions , array $types [] )

Подключает любой ранее определенный набор условий к предоставленному списку с использованием оператора OR. Эта функция принимает список условий в том же формате, что и метод where, поэтому вы можете использовать массивы, объекты выражений, функции обратного вызова или строки.

Важно отметить, что при вызове этой функции любой ранее определенный набор условий для этого запроса будет обработан как один аргумент для оператора OR. Эта функция не будет работать только с последним определенным условием, но со всеми условиями в целом.

При использовании массива для определения условий, создание ограничений для каждой записи массива будет использовать ту же логику, что и функция where(). Это означает, что каждая запись массива будет объединена с другой с помощью оператора OR, если вы не вложите условия в массив с использованием другого оператора.

Примеры:

$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
      ->add(['author_id' => 1])
      ->or_(['author_id' => 2]);
  });

Генерирует следующие условия:

WHERE (title = 'Foo') OR (author_id = 1 OR author_id = 2)

Параметры

string|array|Cake\Database\ExpressionInterface|callable $conditions
Условия, которые нужно добавить с помощью OR.
array $types optional []
ассоциативный массив имен типов, используемый для привязки значений к запросу

Возвращает


$this

См. также

\Cake\Database\Query::where()
Cake\Database\Type

order()source public

order( array|Cake\Database\ExpressionInterface|string $fields , boolean $overwrite false )

Добавляет одно или несколько полей, которые будут использоваться в предложении ORDER для этого запроса. Поля могут быть переданы как массив строк, массив объектов выражений, один объект выражения или одна строка.

Если передается массив, ключи будут использоваться в качестве самого поля, а значение будет представлять порядок, в котором это поле должно быть отсортировано. При многократном вызове с теми же полями в качестве ключа, последнее определение порядка будет превалировать над другими.

По умолчанию эта функция будет добавлять любой переданный аргумент в список полей для выбора, если второй аргумент не установлен в true.

Примеры:

$query->order(['title' => 'DESC', 'author_id' => 'ASC']);

Генерирует:

ORDER BY title DESC, author_id ASC

$query->order(['title' => 'DESC NULLS FIRST'])->order('author_id');

Будет генерировать:

ORDER BY title DESC NULLS FIRST, author_id

$expression = $query->newExpr()->add(['id % 2 = 0']);
$query->order($expression)->order(['title' => 'ASC']);

Преобразуется в:

ORDER BY (id %2 = 0), title ASC

Если вам нужно установить сложные выражения в качестве условий сортировки, вы должны использовать orderAsc() или orderDesc().

Параметры

array|Cake\Database\ExpressionInterface|string $fields
поля, которые нужно добавить в список
boolean $overwrite optional false
нужно ли сбрасывать порядок со списком полей или нет

Возвращает


$this

orderAsc()source public

orderAsc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite false )

Добавляет предложение ORDER BY с направлением ASC.

Этот метод позволяет установить сложные выражения в качестве условий сортировки в отличие от order()

Параметры

string|Cake\Database\Expression\QueryExpression $field
Поле для сортировки.
boolean $overwrite optional false
Нужно ли сбрасывать предложения сортировки.

Возвращает


$this

orderDesc()source public

orderDesc( string|Cake\Database\Expression\QueryExpression $field , boolean $overwrite false )

Добавляет предложение ORDER BY с направлением DESC.

Этот метод позволяет установить сложные выражения в качестве условий сортировки в отличие от order()

Параметры

string|Cake\Database\Expression\QueryExpression $field
Поле для сортировки.
boolean $overwrite optional false
Нужно ли сбрасывать предложения сортировки.

Возвращает


$this

page()source public

page( integer $num , integer|null $limit null )

Устанавливает страницу результатов, которую вы хотите.

Этот метод предоставляет более удобный интерфейс для установки ограничения + смещения в наборе записей, которые вы хотите в качестве результатов. Если пусто, ограничение по умолчанию будет установлено на существующее ограничение, а если и оно пустое, то будет использоваться 25.

Страницы должны начинаться с 1.

Параметры

integer $num
Номер страницы, которую вы хотите.
integer|null $limit optional null

Количество строк на странице. Если null, будет использоваться текущее ограничение.

Возвращает


$this

removeJoin()source public

removeJoin( string $name )

Удаляет соединение, если оно было определено.

Полезно, когда вы переопределяете соединения или хотите изменить порядок предложений соединения.

Параметры

string $name
Псевдоним/имя соединения для удаления.

Возвращает


$this

rightJoin()source public

rightJoin( string|array $table , string|array|Cake\Database\ExpressionInterface $conditions [] , array $types [] )

Добавляет предложение RIGHT JOIN в запрос.

Это сокращенный метод для построения соединений с помощью join().

Аргументы этого метода идентичны сокращенному методу leftJoin() , пожалуйста, обратитесь к описанию этого метода для получения дополнительной информации.

Параметры

string|array $table
Таблица для соединения
string|array|Cake\Database\ExpressionInterface $conditions optional []

Условия для соединения.

array $types optional []

список типов, связанных с условиями, используемыми для преобразования значений в соответствующее представление базы данных.

Возвращает


$this

select()source public

select( array|Cake\Database\ExpressionInterface|string|callable $fields [] , boolean $overwrite false )

Добавляет новые поля, которые будут возвращены оператором 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::autoFields() , чтобы выбрать поля по умолчанию из таблицы.

Параметры

array|Cake\Database\ExpressionInterface|string|callable $fields optional []
поля, которые нужно добавить в список.
boolean $overwrite optional false
нужно ли сбрасывать поля с переданным списком или нет

Возвращает


$this

selectTypeMap()source public

selectTypeMap( Cake\Database\TypeMap $typeMap null )

Устанавливает класс TypeMap, где хранятся типы для каждого поля в предложении select.

При вызове без аргументов возвращается текущий объект TypeMap.

Параметры

Cake\Database\TypeMap $typeMap optional null
Объект карты, который нужно использовать

Возвращает


$this|\Cake\Database\TypeMap
END_OF_DOCUMENT_MARKER

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

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( )

Возвращает тип этого запроса (select, insert, update, delete)

Возвращает

строка

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

valueBinder( Cake\Database\ValueBinder|null $binder null )

Возвращает текущий используемый экземпляр ValueBinder. Если значение передано, оно будет установлено в качестве нового экземпляра для использования.

ValueBinder отвечает за создание заготовок запросов и временное связывание значений с этими заготовками, чтобы их можно было правильно передать объекту оператора.

Параметры

Cake\Database\ValueBinder|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() с третьим параметром, установленным в 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 необязательно []
ассоциативный массив имён типов, используемых для привязки значений к запросу
boolean $overwrite необязательно false
нужно ли сбросить условия с переданным списком или нет

Возвращает


$this

См. также

Cake\Database\Type
Cake\Database\Expression\QueryExpression

Методы, используемые из Cake\Database\TypeMapTrait

defaultTypes()source public

defaultTypes( array $types null )

Позволяет установить значения типов по умолчанию при цепочечном запросе

Параметры

массив $types необязательно null
Массив типов для установки.

Возвращает


$this|массив

typeMap()source public

typeMap( array|Cake\Database\TypeMap|null $typeMap null )

Создаёт новую TypeMap, если $typeMap является массивом, в противном случае возвращает существующую карту типов или обменивает её на заданную.

Параметры

массив|Cake\Database\TypeMap|null $typeMap необязательно null
Создаёт TypeMap, если массив, иначе устанавливает заданную TypeMap

Возвращает


$this|\Cake\Database\TypeMap

Подробности свойств

$_connectionsource

protected Cake\Datasource\ConnectionInterface

Экземпляр подключения, который необходимо использовать для выполнения этого запроса.

$_dirtysource

protected boolean

Указывает, была ли внутренняя часть состояния этого запроса изменена, это используется для отбрасывания внутренних кэшированных объектов, таких как преобразованный запрос или ссылка на выполненное утверждение.

false

$_functionsBuildersource

protected Cake\Database\FunctionsBuilder

Экземпляр объекта-строителя функций, используемого для генерации произвольных SQL-функций.

$_iteratorsource

protected Cake\Database\StatementInterface

Объект инструкции, полученный в результате выполнения этого запроса.

$_partssource

protected массив

Список 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 массив

Список функций обратного вызова, которые будут вызываться для изменения каждой строки из результирующей инструкции при извлечении. Каждая функция обратного вызова будет получать массив строк в качестве первого аргумента.

[]

$_selectTypeMapsource

protected Cake\Database\TypeMap

Карта типов для полей в предложении select

$_typesource

protected строка

Тип этого запроса (select, insert, update, delete).

'select'

$_typeCastAttachedsource

protected boolean

Флаг отслеживания, чтобы убедиться, что прикреплён только один преобразователь типов.

false

$_useBufferedResultssource

protected boolean

Булево значение для отслеживания того, включены ли буферизованные результаты.

true

$_valueBindersource

protected Cake\Database\ValueBinder

Объект, отвечающий за генерацию заполнительных значений запросов и временное хранение значений, связанных с каждым из них.

© 2005–2017 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.3/class-Cake.Database.Query.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API