Урок 3: Работа с базой данных (Active Record) в Yii 2

На 3-ем уроке мы изучимв одну из ключевых тем Yii 2, это взаимодействие с базой данных через Active Record. Это основа почти любого веб-приложения, поэтому внимательно следите за каждым шагом. Мы разберем настройку подключения, создание моделей и базовые операции CRUD. В конце вас ждут практические задачи, чтобы закрепить знания.

Настройка подключения к базе данных (config/db.php)

Первым делом нам нужно научить Yii 2 общаться с базой данных. Всё начинается с файла config/db.php, который хранит параметры подключения. Давайте создадим его, если он ещё не существует.

Шаг 1: Создание конфигурационного файла

Откройте папку config вашего проекта и создайте файл db.php со следующим содержимым:

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:

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 и получаете доступ к данным через объекты:

php
$user = new User();
$user->name = 'Максим';
$user->save(); // Запись в БД

Плюсы Active Record:

  • Интуитивно понятный синтаксис.
  • Встроенная защита от SQL-инъекций.
  • Поддержка связей между таблицами (о них в следующих уроках).

Создание модели для таблицы

Предположим, у нас есть таблица articles со структурой:

sql
CREATE TABLE articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    created_at DATETIME
);

Генерация модели через Gii

Yii 2 предоставляет инструмент Gii. Чтобы создать модель:

  1. Перейдите по адресу http://ваш-сайт/gii.
  2. Выберите пункт Model Generator.
  3. Укажите:
    • Table Name: articles
    • Model Class: Article
  4. Нажмите Generate.

Результат: В папке models появится файл Article.php:

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: Получить все записи

php
$articles = Article::find()->all(); // Вернет массив объектов Article

Пример 2: Условия и сортировка

php
$recentArticles = Article::find()
    ->where(['status' => 1]) // WHERE status = 1
    ->orderBy('created_at DESC')
    ->limit(5)
    ->all();

Пример 3: Получить одну запись по ID

php
$article = Article::findOne(1); // Ищет запись с id = 1

2. Добавление данных (INSERT)

php
$article = new Article();
$article->title = 'Мой первый пост';
$article->content = 'Текст статьи...';
$article->created_at = date('Y-m-d H:i:s');
$article->save(); // Возвращает true/false в зависимости от успеха

Проверка валидации:

php
if ($article->save()) {
    echo 'Успешно сохранено!';
} else {
    echo 'Ошибки: ' . print_r($article->errors, true);
}

3. Обновление данных (UPDATE)

Способ 1:

php
$article = Article::findOne(1);
$article->title = 'Новый заголовок';
$article->save();

Способ 2 (прямое обновление):

php
Article::updateAll(
    ['title' => 'Новый заголовок'], // Поля для обновления
    ['id' => 1] // Условие
);

4. Удаление данных (DELETE)

php
$article = Article::findOne(1);
$article->delete(); 

// Или так:
Article::deleteAll(['status' => 0]); // Удалить все записи со статусом 0

Практические задачи

Закрепим материал на примерах.

Задача 1: Создание модели

  1. Создайте таблицу products с полями idnamepricecategory_id.
  2. Сгенерируйте модель Product через Gii.
  3. Проверьте, что модель подключена, выполнив в коде:
php
$product = new Product();
$product->name = 'Ноутбук';
$product->price = 50000;
$product->save();

Задача 2: Выборка данных

Напишите код, который:

  1. Находит все товары дороже 1000 рублей.
  2. Выводит их названия и цены.

Решение:

php
$products = Product::find()
    ->where(['>', 'price', 1000])
    ->all();

foreach ($products as $product) {
    echo $product->name . ' - ' . $product->price . '<br>';
}

Задача 3: Обновление и удаление

  1. Увеличьте цену всех товаров в категории 2 на 10%.
  2. Удалите все товары с ценой менее 500 рублей.

Решение:

php
// Обновление
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». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.

Персональные рекомендации
Оставить комментарий