Změna aktivní databáze za běhu aplikace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pipaslot
Člen | 19
+
0
-

Zdravím,
navrhuji aplikaci s centrální databází a s údaji o uživatelích(a podrobnostech o systému). Avšak potřebuju aby po přihlášení se uživatele do aplikace (kontrolou informací v centrální DB) se změnila využívaná databáze. Samozřejmě s tím souvisí i vytváření neexistujících databází a tabulek.
Nemáte někdo představu, jak se dá za běhu pouze zaměnit databáze, pro klasickou práci v modelech?
Díky za Vaše rady.

vvoody
Člen | 910
+
0
-

Ja by som vytvoril dve sluzby. Prvu ‚centralDatabase‘ v configu a druhu ‚database‘ (alebo mozno ‚personalDatabase‘:)) niekde v basePresenteri po overeni prihlasenia. $this->context->addService(), to uz ale asi nepojde autowiring takze treba v configu napriklad pri modeloch odkazovat cez @centralDatabase@database.

Pipaslot
Člen | 19
+
0
-

Našel jsem zatím řešení vytvořením rodičovského modelu, který v konstruktoru vytvoří uživateli databázi(pokud neexistuje) a vytvoří spojení s databází. Na toto spojení se dá později odkazovat a vše zatím funguje podle představ.

function __construct(\Nette\Database\Connection $edb, \Nette\Security\User $user, \Nette\DI\IContainer $container)
	{
		$this->editorDB = $edb;
		$this->user = $user;
		$this->dbName = $this->user->getIdentity()->database;
		/*
		 * Vytvoření databáze uživatele před jejím připojením
		 */
		try{
			$this->editorDB->query("CREATE DATABASE ".$this->dbName." DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci");
		}catch(Exception $e){

		}

		//Předání řízení databáze uživatelské databázi
		$this->userDB = new Nette\Database\Connection(
						$container->parameters['database']['driver'].':host='.$container->parameters['database']['host'].';dbname='.$this->user->getIdentity()->database,
						$container->parameters['database']["user"],
						$container->parameters['database']["password"]);
	}
Pipaslot
Člen | 19
+
0
-

Práce s databází přidělenou za běhu je zatím v pohodě, problém je akorát v tom, že příkazy,které pro takovou databázi vytvářím, se mi nezobrazí v laděnce. Nevíte někdo, co mám udělat aby laděnka vypisovala všechny SQL příkazy pro databázi přidělenou za běhu?