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
+
0
-

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
+
0
-

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
+
+2
-

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)