Для формирования запросов в базу данных в Yii2 используются ActiveRecord и Query Builder. Оба этих подхода позволяют выполнять запросы без непосредственного написания SQL-кода, что облегчает их чтение и поддержку.
Активная запись (ActiveRecord) - это шаблон проектирования, который предоставляет интерфейс для взаимодействия с базой данных через объекты модели. Объекты модели представляют собой записи в таблице базы данных. При использовании ActiveRecord, выполнение запросов осуществляется посредством методов, предоставляемых моделью.
Примеры использования ActiveRecord для формирования запросов:
1. Выборка всех записей из таблицы:
$users = User::find()->all();
2. Выборка одной записи по условию:
$user = User::findOne(['id' => 1]);
3. Выборка записей с применением условий и сортировкой:
$users = User::find() ->where(['status' => 1]) ->orderBy('username') ->all();
4. Вставка новой записи:
$user = new User(); $user->username = 'John'; $user->save();
5. Обновление существующей записи:
$user = User::findOne(['id' => 1]); $user->username = 'Jane'; $user->save();
6. Удаление записи:
$user = User::findOne(['id' => 1]); $user->delete();
Query Builder - это более гибкий подход, который позволяет формировать сложные запросы, используя цепочку методов. Query Builder строит запрос на основе предоставленной информации о таблице, условиях, сортировке и других параметрах.
Примеры использования Query Builder для формирования запросов:
1. Простой SELECT:
$query = (new yiidbQuery()) ->select('*') ->from('user') ->where(['status' => 1]) ->orderBy('username'); $users = $query->all();
2. INSERT:
$query = Yii::$app->db->createCommand()->insert('user', [ 'username' => 'John', 'email' => '[email protected]', 'status' => 1, ]); $query->execute();
3. UPDATE:
$query = Yii::$app->db->createCommand()->update('user', [ 'username' => 'Jane', 'email' => '[email protected]', ], 'id = :id', [':id' => 1]); $query->execute();
4. DELETE:
$query = Yii::$app->db->createCommand()->delete('user', 'id = :id', [':id' => 1]); $query->execute();
Оба подхода имеют свои преимущества и недостатки, и выбор между ними зависит от конкретных требований проекта. ActiveRecord обеспечивает более простой и интуитивно понятный интерфейс, но может быть менее гибким в сложных случаях. Query Builder, с другой стороны, позволяет более гибко управлять составлением запросов, но его использование может повлечь за собой более сложный и громоздкий код. Выбор зависит от вашего стиля кодирования, предпочтений и требований проекта.