Конструктор запросов позволяет создавать запросы 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 => user10@gmail.com’]
- формат оператора — [‘like’, ‘name’, ‘User’]
формат строки — ‘name = User10’
формат хэша — [‘name’ => ‘User10′, ’email => user10@gmail.com’]
формат оператора — [‘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' => 'user5@gmail.com'
])
->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 может быть либо именем столбца, либо выражением БД.