Подключение к базе данных
Статьи блога нужно где-то хранить — для этого служит база данных. 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, MariaDB | mysql:host=localhost;dbname=blog |
| PostgreSQL | pgsql:host=localhost;port=5432;dbname=blog |
| SQLite | sqlite:/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').