Bicycle/Services/Database.php
Egor Isaev 9d4edf147a dev
2026-08-07 11:40:03 +03:00

59 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @package Bicycle
* @author Egor Isaev
* @description Database.php
* @copyright (c) 07/08/2026
*/
namespace Services;
use Services\DataBase\Classes\PdoDriver;
use System\Classes\Config;
use System\Classes\MyException;
/**
* Точка входа в реляционную БД. Имя аргумента — это имя подключения
* (ключ в Config::get('db', $name), по умолчанию 'default'), а не тип драйвера —
* сейчас есть только один драйвер ('pdo'), поэтому реестр по типу драйвера
* (как в Auth::$_drivers) не заводится, пока не появится второй.
*
* Database::instance()->query('SELECT ...');
* Database::instance('reporting')->query(...); // отдельное подключение
*/
class Database
{
/** @var array<string,PdoDriver> Кэш подключений по имени */
protected static array $_instances = [];
/**
* Возвращает подключение по имени (кэшируется).
*
* @param string|null $name Имя подключения из конфига; null — 'default'
* @return PdoDriver
* @throws MyException Если подключение не описано в конфиге или драйвер неизвестен
*/
public static function instance(?string $name = null): PdoDriver
{
$name ??= 'default';
if (!isset(self::$_instances[$name])) {
$config = Config::get('db', $name);
if ($config === null) {
throw new MyException('Подключение к БД не описано в конфиге: :name', [':name' => $name]);
}
if (($config['driver'] ?? null) !== 'pdo') {
throw new MyException(
'Неизвестный драйвер БД: :driver', [':driver' => $config['driver'] ?? 'null']
);
}
self::$_instances[$name] = new PdoDriver($config['connection'] ?? []);
}
return self::$_instances[$name];
}
}