Конструктор запросов позволяет создавать запросы 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 , вы увидите следующий вывод.
Где () функция
Функция 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); }
Ниже будет вывод.
Функция 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); }
Ниже будет вывод.
Методы 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 может быть либо именем столбца, либо выражением БД.