Kdyby\Doctrine dynamické nastavení conection pro EM
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- marist
- Člen | 2
Zdravím,
na projektu máme databázi rozdělenou do shardů podle uživatelů. Potřebuji na začátku dotazu nastavit připojení pro Doctrine EM na základě informací co si vytáhnu z master db (k tomu nepotřebuju Doctrine), bohužel si nevím rady jak tam to nastavení dostat. Napadá někoho jak tuto konfiguraci provést?
Díky
- marist
- Člen | 2
Tak zatím jsem to vyřešil přes reflexi takto:
$connection = $container->getService('doctrine.default.connection');
$connectionParams = $connection->getParams();
// Přeskočeno nastavení požadovaných parametrů do $connectionParams...
$property = (new \Nette\Reflection\ClassType(\Doctrine\DBAL\Connection::class))->getProperty('_params');
$property->setAccessible(TRUE);
$property->setValue($connection, $connectionParams);
Vůbec se mi nelíbí do toho takhle přes reflexi šahat ale nenapadá mě lepší způsob.
- Martk
- Člen | 661
Config:
services:
- ConnectionSelector
doctrine:
dbname: @ConnectionSelector::getDbName()
a v servisní třídě vrátíš jméno databáze nebo cokoliv.
class ConnectionSelector {
public function __construct() {
// Initializace databaze
}
public function getDbName() {
// ...
}
}
Editoval Martk (16. 2. 2017 14:07)