На 3-ем уроке мы изучимв одну из ключевых тем Yii 2, это взаимодействие с базой данных через Active Record. Это основа почти любого веб-приложения, поэтому внимательно следите за каждым шагом. Мы разберем настройку подключения, создание моделей и базовые операции CRUD. В конце вас ждут практические задачи, чтобы закрепить знания.
Настройка подключения к базе данных (config/db.php)
Первым делом нам нужно научить Yii 2 общаться с базой данных. Всё начинается с файла config/db.php, который хранит параметры подключения. Давайте создадим его, если он ещё не существует.
Шаг 1: Создание конфигурационного файла
Откройте папку config вашего проекта и создайте файл db.php со следующим содержимым:
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=my_database', // Например, для MySQL
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
Пояснения:
dsnстрока подключения. Указывает тип СУБД (mysql, pgsql и т.д.), хост и имя базы.usernameиpasswordлогин и пароль от БД.charsetкодировка (рекомендуется utf8).
Шаг 2: Подключение конфига в основном файле
Убедитесь, что файл db.php подключен в config/web.php:
return [ // ... 'components' => [ 'db' => require __DIR__ . '/db.php', // Другие компоненты... ], ];
Всегда используйте отдельный конфиг для базы данных! Это упростит миграции между средами (разработка, продакшен) и повысит безопасность.
Что такое Active Record?
Active Record это шаблон проектирования, который связывает объекты вашего приложения с записями в базе данных. В Yii 2 он реализован через класс yii\db\ActiveRecord и позволяет:
- Избегать написания сырых SQL-запросов.
- Упрощать операции CRUD (Create, Read, Update, Delete).
- Валидировать данные перед сохранением.
Пример:
Если у вас есть таблица users, вы создаете класс User, наследуете его от ActiveRecord и получаете доступ к данным через объекты:
$user = new User(); $user->name = 'Максим'; $user->save(); // Запись в БД
Плюсы Active Record:
- Интуитивно понятный синтаксис.
- Встроенная защита от SQL-инъекций.
- Поддержка связей между таблицами (о них в следующих уроках).
Создание модели для таблицы
Предположим, у нас есть таблица articles со структурой:
CREATE TABLE articles ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, content TEXT, created_at DATETIME );
Генерация модели через Gii
Yii 2 предоставляет инструмент Gii. Чтобы создать модель:
- Перейдите по адресу
http://ваш-сайт/gii. - Выберите пункт Model Generator.
- Укажите:
- Table Name:
articles - Model Class:
Article
- Table Name:
- Нажмите Generate.
Результат: В папке models появится файл Article.php:
namespace app\models; use yii\db\ActiveRecord; class Article extends ActiveRecord { public static function tableName() { return 'articles'; // Указываем имя таблицы } }
- Если имя таблицы не совпадает с именем модели (например,
user_profiles→UserProfile), переопределите методtableName(). - Модель автоматически связывается с полями таблицы. Доступ к ним через свойства объекта:
$article->title.
CRUD: Базовые операции с данными
1. Выборка данных (SELECT)
Пример 1: Получить все записи
$articles = Article::find()->all(); // Вернет массив объектов Article
Пример 2: Условия и сортировка
$recentArticles = Article::find() ->where(['status' => 1]) // WHERE status = 1 ->orderBy('created_at DESC') ->limit(5) ->all();
Пример 3: Получить одну запись по ID
$article = Article::findOne(1); // Ищет запись с id = 1
2. Добавление данных (INSERT)
$article = new Article(); $article->title = 'Мой первый пост'; $article->content = 'Текст статьи...'; $article->created_at = date('Y-m-d H:i:s'); $article->save(); // Возвращает true/false в зависимости от успеха
Проверка валидации:
if ($article->save()) { echo 'Успешно сохранено!'; } else { echo 'Ошибки: ' . print_r($article->errors, true); }
3. Обновление данных (UPDATE)
Способ 1:
$article = Article::findOne(1); $article->title = 'Новый заголовок'; $article->save();
Способ 2 (прямое обновление):
Article::updateAll( ['title' => 'Новый заголовок'], // Поля для обновления ['id' => 1] // Условие );
4. Удаление данных (DELETE)
$article = Article::findOne(1); $article->delete(); // Или так: Article::deleteAll(['status' => 0]); // Удалить все записи со статусом 0
Практические задачи
Закрепим материал на примерах.
Задача 1: Создание модели
- Создайте таблицу
productsс полямиid,name,price,category_id. - Сгенерируйте модель
Productчерез Gii. - Проверьте, что модель подключена, выполнив в коде:
$product = new Product(); $product->name = 'Ноутбук'; $product->price = 50000; $product->save();
Задача 2: Выборка данных
Напишите код, который:
- Находит все товары дороже 1000 рублей.
- Выводит их названия и цены.
Решение:
$products = Product::find() ->where(['>', 'price', 1000]) ->all(); foreach ($products as $product) { echo $product->name . ' - ' . $product->price . '<br>'; }
Задача 3: Обновление и удаление
- Увеличьте цену всех товаров в категории 2 на 10%.
- Удалите все товары с ценой менее 500 рублей.
Решение:
// Обновление Product::updateAll( ['price' => new \yii\db\Expression('price * 1.1')], ['category_id' => 2] ); // Удаление Product::deleteAll(['<', 'price', 500]);
Сегодня мы освоили основы работы с базой данных в Yii 2 через Active Record. Вы научились настраивать подключение, создавать модели и выполнять CRUD-операции. Это основы, на котором мы будем строить более сложные функции, такие как связи между моделями, валидацию, транзакции.
Переходите к следующему уроку, где мы разберем создание форм и валидацию данных. А если хотите изучить курс полностью, вот ссылка: полный курс по Yii 2 для начинающих.
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


