Учебники

Yii — Query Builder

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

Чтобы использовать построитель запросов, вы должны выполнить следующие шаги:

  • Создайте объект yii \ db \ Query.
  • Выполните метод запроса.

Чтобы создать объект yii \ db \ Query , вы должны вызывать разные функции построителя запросов для определения разных частей SQL-запроса.

Шаг 1. Чтобы показать типичное использование построителя запросов, измените метод actionTestDb следующим образом.

public function actionTestDb() {
   //generates "SELECT id, name, email FROM user WHERE name = 'User10';"
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['name' => 'User10'])
      ->one();
   var_dump($user);
}

Шаг 2 — Перейдите по адресу http: // localhost: 8080 / index.php? R = site / test-db , вы увидите следующий вывод.

Query Builder

Где () функция

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

  • формат строки — ‘name = User10’

  • формат хэша — [‘name’ => ‘User10′, ’email => [email protected]’]

  • формат оператора — [‘like’, ‘name’, ‘User’]

формат строки — ‘name = User10’

формат хэша — [‘name’ => ‘User10′, ’email => [email protected]’]

формат оператора — [‘like’, ‘name’, ‘User’]

Пример формата String

public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where('name = :name', [':name' => 'User11'])
      ->one();
   var_dump($user);
}

Ниже будет вывод.

Вывод примера формата строки

Пример формата Hash

public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where([
         'name' => 'User5',
         'email' => '[email protected]'
      ])
      ->one();
   var_dump($user);
}

Ниже будет вывод.

Вывод примера хэш-формата

Формат оператора позволяет определять произвольные условия в следующем формате —

[operator, operand1, operand2]

Оператор может быть —

  • и — [‘and’, ‘id = 1’, ‘id = 2’] сгенерирует id = 1 AND id = 2 или: аналогично оператору and

  • Между — [‘Между’, ‘ID’, 1, 15] будет генерировать идентификатор между 1 и 15

  • не между — аналогично оператору между, но вместо этого заменяется на НЕ между

  • in — [‘in’, ‘id’, [5,10,15]] сгенерирует id IN (5,10,15)

  • not in — аналогично оператору in, но IN заменяется на NOT IN

  • like — [‘like’, ‘name’, ‘user’] сгенерирует имя LIKE ‘% user%’

  • или like — аналогично оператору like, но OR используется для разделения предикатов LIKE

  • не нравится — похоже на оператор like, но LIKE заменяется на NOT LIKE

  • или не как — аналогично оператору not like, но OR используется для объединения предикатов NOT LIKE

  • существует — требуется один операнд, который должен быть экземпляром класса yii \ db \ Query

  • не существует — аналогично оператору существующего, но создает выражение НЕ СУЩЕСТВУЕТ (подзапрос)

  • <, <=,>,> = или любой другой оператор БД: [‘<‘, ‘id’, 10] сгенерирует id <10

и — [‘and’, ‘id = 1’, ‘id = 2’] сгенерирует id = 1 AND id = 2 или: аналогично оператору and

Между — [‘Между’, ‘ID’, 1, 15] будет генерировать идентификатор между 1 и 15

не между — аналогично оператору между, но вместо этого заменяется на НЕ между

in — [‘in’, ‘id’, [5,10,15]] сгенерирует id IN (5,10,15)

not in — аналогично оператору in, но IN заменяется на NOT IN

like — [‘like’, ‘name’, ‘user’] сгенерирует имя LIKE ‘% user%’

или like — аналогично оператору like, но OR используется для разделения предикатов LIKE

не нравится — похоже на оператор like, но LIKE заменяется на NOT LIKE

или не как — аналогично оператору not like, но OR используется для объединения предикатов NOT LIKE

существует — требуется один операнд, который должен быть экземпляром класса yii \ db \ Query

не существует — аналогично оператору существующего, но создает выражение НЕ СУЩЕСТВУЕТ (подзапрос)

<, <=,>,> = или любой другой оператор БД: [‘<‘, ‘id’, 10] сгенерирует id <10

Пример формата оператора

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['between', 'id', 5, 7])
      ->all();
   var_dump($users);
}

Ниже будет вывод.

Пример формата оператора

Функция OrderBy ()

Функция orderBy () определяет фрагмент ORDER BY.

Пример

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->orderBy('name DESC')
      ->all();
   var_dump($users);
}

Ниже будет вывод.

Пример функции OrderBy Вывод

Функция groupBy ()

Функция groupBy () определяет фрагмент GROUP BY, а метод have () указывает фрагмент HAVING.

Пример

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->groupBy('name')
      ->having('id < 5')
      ->all();
   var_dump($users);
}

Ниже будет вывод.

Выходные данные функции groupBy

Методы limit () и offset () определяют фрагменты LIMIT и OFFSET .

Пример

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->limit(5)
      ->offset(5)
      ->all();
   var_dump($users);
}

Вы можете увидеть следующий вывод —

Ограничить смещение фрагментов

Класс yii \ db \ Query предоставляет набор методов для различных целей —

all () — возвращает массив строк пар имя-значение.

one () — возвращает первый ряд.

column () — возвращает первый столбец.

scalar () — возвращает скалярное значение из первой строки и первого столбца результата.

exist () — возвращает значение, указывающее, содержит ли запрос какой-либо результат

count () Возвращает результат запроса COUNT

другие методы запроса агрегации — включает сумму ($ q), среднее ($ q), max ($ q), min ($ q). Параметр $ q может быть либо именем столбца, либо выражением БД.