Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Подключение к базе данных

Статьи блога нужно где-то хранить — для этого служит база данных. Yii работает с MySQL, MariaDB, PostgreSQL, SQLite и другими системами. Параметры подключения записывают в один файл, после чего база доступна в любом месте кода как компонент Yii::$app->db.

Создание базы

Саму базу Yii не создаёт. Создайте её любым удобным способом, например в консоли MySQL:

CREATE DATABASE blog CHARACTER SET utf8mb4;

Появится пустая база blog. Таблицы в неё добавят миграции из следующего урока.

Файл подключения

Параметры лежат в файле config/db.php, он уже есть в проекте. Замените значения своими:

// config/db.php
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=blog',
    'username' => 'root',
    'password' => 'secret',
    'charset' => 'utf8mb4',
];

Строка dsn описывает, к какой базе подключаться: тип системы, адрес сервера и имя базы. Этот файл подключён в config/web.php и config/console.php строкой 'db' => $db, поэтому настройка действует и на сайте, и в консоли.

Строка dsn для разных систем

СистемаПример dsn
MySQL, MariaDBmysql:host=localhost;dbname=blog
PostgreSQLpgsql:host=localhost;port=5432;dbname=blog
SQLitesqlite:/path/to/blog.db

Для каждой системы в PHP должно быть включено своё расширение: pdo_mysql, pdo_pgsql или pdo_sqlite.

Проверка

Самый простой способ проверить подключение — консольная команда миграций:

php yii migrate

Если параметры верны, команда ответит No new migrations found. Your system is up-to-date. и создаст в базе служебную таблицу migration. При неверном пароле или имени базы появится текст ошибки от сервера базы данных.

Первый запрос

Запрос на языке SQL выполняют через компонент db:

// controllers/PostController.php
public function actionDbTest(): string
{
    $version = Yii::$app->db->createCommand('SELECT VERSION()')->queryScalar();
 
    return "Версия сервера: $version";
}

Страница /post/db-test покажет версию сервера MySQL. Метод queryScalar() возвращает одно значение, queryOne() — одну строку, queryAll() — все строки массивом. В следующих уроках SQL вручную почти не понадобится: с таблицами работают через модели.

Частая ошибка

Файл config/db.php с паролем нельзя отдавать в общий репозиторий в рабочем виде: пароль от сервера увидят все, у кого есть доступ к коду. Храните в репозитории вариант с данными для разработки, а на сервере читайте настоящие значения из переменных окружения — например, 'password' => getenv('DB_PASSWORD').

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.