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 может быть именем столбца или выражением БД.