Spec-Zone.ru › CakePHP 3.2

Класс 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 для описания отдельного условия объединения.
  • 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
    Создать запрос на удаление.
  • 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
    Создать запрос на вставку.
  • into() public
    Установить имя таблицы для запросов вставки.
  • join() public

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

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

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

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

    Возвращает новый объект QueryExpression. Это удобная функция при построении сложных запросов с помощью интерфейса Fluent API. Вы также можете переопределить эту функцию в подклассах, чтобы использовать более специализированный класс 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
    Удалить объединение, если оно было определено.
  • rightJoin() public
    Добавляет условие RIGHT JOIN к запросу.
  • select() public

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

  • selectTypeMap() public

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

  • 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|callable $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, описывающему отдельное предложение 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|callable $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|callable $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 необязательно 'string'

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

Возвращает


$this

bufferResults()source public

bufferResults( boolean|null $enable null )

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

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

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

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

Параметры

булево|null $enable необязательно null
включить или выключить буферизацию

Возвращает

булево|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: булево
  • from: массив таблиц
  • join: массив
  • set: массив
  • where: QueryExpression, возвращает null, если не задано
  • group: массив
  • having: QueryExpression, возвращает null, если не задано
  • order: OrderByExpression, возвращает null, если не задано
  • limit: целое число или QueryExpression, null, если не задано
  • offset: целое число или QueryExpression, null, если не задано
  • union: массив

Параметры

строка $name
имя части запроса, которое нужно вернуть

Возвращает

смешанный

connection()source public

connection( Cake\Datasource\ConnectionInterface|null $connection 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;
});

Параметры

вызываемая функция|null $callback
обратный вызов, который нужно вызвать при извлечении результатов.
булево $overwrite необязательно false
должен ли он добавлять или заменять все существующие декораторы.

Возвращает


$this

delete()source public

delete( string|null $table null )

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

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

Параметры

строка|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);

Параметры

массив|Cake\Database\ExpressionInterface|строка|булево $on необязательно []

Включить/выключить условие distinct или список полей для фильтрации

булево $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');

Параметры

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

Возвращает


$this

execute()source public

execute( )

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

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

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

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

Возвращает

Cake\Database\StatementInterface

from()source public

from( array|Cake\Database\ExpressionInterface|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

Параметры

массив|Cake\Database\ExpressionInterface|строка $tables необязательно []
таблицы, которые нужно добавить в список
булево $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()

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
поля, которые нужно добавить в список
boolean $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 необязательный []
ассоциативный массив имен типов, используемых для привязки значений к запросу
boolean $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 необязательный []
ассоциативный массив имен типов, используемых для привязки значений к запросу
boolean $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
модификаторы, которые нужно применить к запросу
boolean $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

Параметры

mixed $rawExpression необязательно null
Строка, массив или что угодно, что вы хотите обернуть в объект выражения

Возвращает

Cake\Database\Expression\QueryExpression

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 необязательно []
ассоциативный массив типов, используемых для привязки значений к запросу.

Возвращает


$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 необязательно []
ассоциативный массив типов, используемых для привязки значений к запросу

Возвращает


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

Возвращает


$this

page()source public

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

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

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

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

Параметры

integer $num
Номер страницы, которую вы хотите получить.
integer|null $limit необязательно null

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

Возвращает


$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 необязательно []

Условия для использования при соединении.

array $types необязательно []

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

Возвращает


$this
END_OF_DOCUMENT_MARKER ```

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

Параметры

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

Возвращаемое значение


$this

selectTypeMap()source public

selectTypeMap( Cake\Database\TypeMap $typeMap null )

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

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

Параметры

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

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
boolean $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
boolean $overwrite необязательный false
нужно ли сбросить список запросов для обработки или нет

Возвращаемое значение


$this

update()source public

update( string $table )

Создает запрос на обновление.

Может быть объединен с методами set() и where() для создания запросов на обновление.

Параметры

строка $table
Таблица, которую нужно обновить.

Возвращаемое значение


$this

valueBinder()source public

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

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

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

Параметры

Cake\Database\ValueBinder|null $binder необязательный null

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

Возвращаемое значение


$this|\Cake\Database\ValueBinder
END_OF_DOCUMENT_MARKER

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

Другие объекты Query могут быть использованы в качестве условий для любого поля.

Добавление условий в несколько шагов:

Вы можете использовать вызываемые функции для построения сложных выражений, функции принимают в качестве первого аргумента новый объект 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\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 является массивом, иначе возвращает существующую 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–2016 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.
http://api.cakephp.org/3.2/class-Cake.Database.Query.html

Spec-Zone.ru

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