Подключение к базе данных
Статьи блога хранятся в базе данных. Чтобы CakePHP мог с ней работать, ему нужно сообщить адрес сервера базы, имя базы, пользователя и пароль. Эти параметры называют подключением.
Создание базы
Саму базу создают заранее — средствами MySQL, например в phpMyAdmin или запросом:
CREATE DATABASE blog CHARACTER SET utf8mb4;Появится пустая база blog. Таблицы в ней создадим в следующем уроке.
Где настройки
Подключения описаны в разделе Datasources. Общая часть — тип базы, кодировка — находится в config/app.php, а адрес и пароль записывают в config/app_local.php, потому что на каждом компьютере они свои.
Параметры
Откройте config/app_local.php и заполните подключение default:
// config/app_local.php
'Datasources' => [
'default' => [
'host' => 'localhost',
'username' => 'root',
'password' => 'secret',
'database' => 'blog',
],
],default — подключение, которым пользуются все таблицы приложения. Рядом в файле есть подключение test — отдельная база для тестов.
Проверка
Запустите bin/cake server и откройте http://localhost:8765. В разделе Database страницы-приветствия строка станет зелёной: CakePHP смог подключиться. Если она красная, рядом будет текст ошибки — обычно неверный пароль или имя базы.
Другая база
Тип базы задаёт ключ driver в config/app.php:
| Класс драйвера | База данных |
|---|---|
Cake\Database\Driver\Mysql | MySQL, MariaDB |
Cake\Database\Driver\Postgres | PostgreSQL |
Cake\Database\Driver\Sqlite | SQLite |
Для SQLite сервер не нужен — база хранится в одном файле:
// config/app_local.php
'Datasources' => [
'default' => [
'driver' => \Cake\Database\Driver\Sqlite::class,
'database' => ROOT . DS . 'tmp' . DS . 'blog.sqlite',
],
],Константа ROOT — путь к корню проекта, DS — разделитель папок.
Запрос напрямую
Обычно с базой работают через классы таблиц, но подключение можно получить и напрямую:
use Cake\Datasource\ConnectionManager;
$connection = ConnectionManager::get('default');
$rows = $connection->execute('SELECT 1 AS answer')->fetchAll('assoc');В $rows окажется массив с одной строкой: ['answer' => 1]. Такой код помещают в действие контроллера, а результат выводят функцией debug($rows).
Частая ошибка
Пароль изменили в config/app.php, а подключения всё нет. Причина в том, что app_local.php загружается позже и заменяет значения из app.php. Параметры подключения меняйте в config/app_local.php.