Cotonti / Cotonti

Fast, reliable and flexible PHP CMF/CMS
https://www.cotonti.com
BSD 3-Clause "New" or "Revised" License
92 stars 51 forks source link

Connect to DB when it is really needed. Multiple BD connections #1775

Open Alex300 opened 3 months ago

Alex300 commented 3 months ago

[RU]

Суть:
Сделать фабрику соединений в БД: cot\DВ::getConnection($connection = 'default') где $connection = "имя" соединения. Метод создает экземпляр CotDB и сохраняет ссылку на него и ее и возвращет. При каждом последующем вызове он возвращает ранее сохраненную ссылку.

Конфиг должен быть таким:

$cfg['db'] =>[
    'default' => [
        'host' => 'localhost',
        'port' => '1234',
        'user' => 'db_user',
        'password' => 'db_pass',
        'db' => 'cotonti',
        'driver' => 'mysql', // на будущее
    ],
    'anotherConnection' => [
        'host' => 'another_db_host',
        'port' => '6789',
        'user' => 'another_db_user',
        'password' => 'another_db_pass',
        'db' => 'another_db_name',
        'driver' => 'postgres', // на будущее
    ],
];

В класс Cot добавить метод Cot::db($connection = 'default') - фасад

все обращения к БД должны осуществляться через Cot::db(), например Cot::db()->query(....);

Поддержку Cot::$db и глобальной переменной $db оставить для обратной совместимости и объявить deprecated. Они должны инициализироваться только при включенном $cfg['legacyMode'] = true

Профит: