Encodera

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

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

Оглавление

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

Статьи блога хранятся в базе данных. Чтобы 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\MysqlMySQL, MariaDB
Cake\Database\Driver\PostgresPostgreSQL
Cake\Database\Driver\SqliteSQLite

Для 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.

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

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