Yii - построитель запросов

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

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

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

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

Step 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);
}

Step 2 - Перейти к http://localhost:8080/index.php?r=site/test-db, вы увидите следующий результат.

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

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

  • string format - 'name = User10'

  • hash format - ['name' => 'User10', 'email => [email protected]']

  • operator format - [«нравится», «имя», «пользователь»]

Пример формата строки

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

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

Пример формата хэша

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 - ['and', 'id = 1', 'id = 2'] будет генерировать id = 1 AND id = 2 или: аналогично оператору and

  • between - ['между', 'id', 1, 15] будет генерировать id МЕЖДУ 1 И 15

  • not between - аналогично оператору between, но BETWEEN заменяется на NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] сгенерирует идентификатор IN (5,10,15)

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

  • like - ['like', 'name', 'user'] создаст имя LIKE '% user%'

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

  • not like - аналогично оператору Like, но LIKE заменяется на NOT LIKE

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

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

  • not exists - аналогично оператору exists, но строит выражение NOT EXISTS (подзапрос)

  • <, <=, >, >=, или любой другой оператор БД: ['<', '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.

Example -

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

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

groupBy () Функция

В groupBy() функция определяет фрагмент GROUP BY, а функция having() определяет фрагмент HAVING.

Example -

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

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

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

Example -

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 class предоставляет набор методов для разных целей -

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

  • one() - возвращает первую строку.

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

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

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

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

  • other aggregation query methods - Включает сумму ($q), average($q), max ($q), min($q). Параметр $ q может быть именем столбца или выражением БД.