Dibi – viac inštancií connection

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

Ako sa v Nette cez Dibi pripojiť na druhú (n-tú) databázu?
Aktuálne mám nastavenie:

config.neon

common:
	.....
	dibi:
		driver: mysql
		host: host.host
		username: user
		password: pass
		database: test
		charset: utf8
		profiler: true
		explain: true
		reflection: discovered

	services:
		database: @dibi.connection

bootstrap.php

...
$configurator->onCompile[] = function ($configurator, $compiler) {
    $compiler->addExtension('dibi', new DibiNetteExtension);
};
...

potrebujem k tomu pripojiť ďalšiu DB. Dá sa to?

Patrik Votoček
Člen | 2221
+
0
-

sepo napsal(a):

Ako sa v Nette cez Dibi pripojiť na druhú (n-tú) databázu?
Aktuálne mám nastavenie:

config.neon

common:
	dibi2:
		driver: mysql
		host: host2.host
		username: user
		password: pass
		database: test
		charset: utf8
		profiler: true
		explain: true
		reflection: discovered
	services:
		database2: @dibi2.connection

bootstrap.php

// ...
$configurator->onCompile[] = function ($configurator, $compiler) {
	$compiler->addExtension('dibi2', new DibiNetteExtension);
};
// ...
enumag
Člen | 2118
+
0
-

Wait a sec… od kdy má Dibi reflection??

sepo
Člen | 69
+
0
-

@enumag : to je tam nedopatením

@Patrik Votoček :
bootstrap.php

...
$configurator->createRobotLoader()
	->addDirectory(APP_DIR)
	->addDirectory(LIBS_DIR)
	->register();

$configurator->onCompile[] = function ($configurator, $compiler) {
    $compiler->addExtension('dibi', new DibiNetteExtension);
};

$configurator->onCompile[] = function ($configurator, $compiler) {
    $compiler->addExtension('dibi2', new DibiNetteExtension);
};

$container = $configurator->createContainer();
....

config.neon

common:
    .....
    dibi:
        driver: mysql
        host: host.host
        username: user
        password: pass
        database: test

    dibi2:
        driver: mssql
        host: host2.host
        username: user
        password: pass
        database: test2

    services:
        database: @dibi.connection
		database2: @dibi2.connection

skončí ladenkou „Multiple services of type DibiConnection found.“

Filip Procházka
Moderator | 4668
+
0
-

Jedno z nich musí být hlavní a ostatní vedlejší. Zkus

services:
	dibi2.connection:
		autowired: false
sepo
Člen | 69
+
0
-
services:
        database: @dibi.connection
        dibi2.connection:
        	autowired: false

ako teraz použijem v presentery druhý connection (dibi2.connection)
je vôbec možné v jednom presentery používať obe connection ?

mkoubik
Člen | 728
+
0
-

Ale pak si to druhé musíš předávat do všech servis ručně.
Edit: v presenteru bohužel pouze přes $this->context.

Editoval mkoubik (16. 12. 2012 18:23)

Patrik Votoček
Člen | 2221
+
0
-

Tohle sem v týdnu řešil v práci a nakonec jsem musel udělat DibiMasterConnection a DibiSlaveConnection a napsat si vlastní extension která tohle pořeší.

sepo
Člen | 69
+
0
-

@Patrik Votoček : môžeš niekde zavesiť/ukázať implementáciu ?