připojení do dvou databází

- Paradiso
 - Člen | 101
 
Ahoj, nedaří se mi nastavit config neon, tak abych měl připojení do 2 databází.
Respektivě, lze to udělat takto:
		database:
			class: Nette\Database\Connection
			arguments: ['mysql:host=%database.host%;dbname=%database.dbname%', '%database.user%', '%database.pass%']
		database2:
			class: Nette\Database\Connection
			arguments: ['mysql:host=%database2.host%;dbname=%database2.dbname%', '%database2.user%', '%database2.pass%']
ale to zase nemám dotazy v debug panelu
když jsem zkoušel toto tak se do instance database2 uloží údaje stejné jako v database
		database:
			default:
				dsn: '%database.engine%:host=%database.host%;dbname=%database.dbname%'
				user: %database.user%
				password: %database.pass%
		database2:
			default:
				dsn: '%database2.engine%:host=%database2.host%;dbname=%database2.dbname%'
				user: %database2.user%
				password: %database2.pass%
	services:
		database: @Nette\Database\Connection
		database2: @Nette\Database\Connection
když jsem zkusil kombinaci prvního a druhého (první db jsem chtěl mít v debugu a druhou ne, tak mi to vyhodilo Multiple services of type Nette\Database\Connection found: nette.database.default, database2
Jak to správně řešit? Děkuji

- enumag
 - Člen | 2118
 
database:
    default:
        dsn: '%database.engine%:host=%database.host%;dbname=%database.dbname%'
        user: %database.user%
        password: %database.pass%
    second:
        dsn: '%database2.engine%:host=%database2.host%;dbname=%database2.dbname%'
        user: %database2.user%
        password: %database2.pass%
services:
    database: @nette.database.default
    database2: @nette.database.second
					Editoval enumag (29. 1. 2013 18:04)

- raketoplan2005
 - Člen | 147
 
Mám jen jeden presenter ve kterém potřebuji obě databáze, jak rozliším v inject metodě
injectConection(\Nette\Database\Connection $db)
která je která?
Díky

- enumag
 - Člen | 2118
 
Nijak, je to chyba návrhu aplikace.
- V Presenteru bys nikdy neměl pracovat přímo s databází (a už vůbec ne se dvěma), ale s modelem.
 - Každá třída modelu by měla pracovat s nejvýše jedním databázovým připojením.
 - Modely používající výchozí připojení ho dostanou skrz autowiring, modelům používající sekundární ho nastavíš v neonu.
 - Do presenteru si můžeš injectnout kolik chceš modelů.
 
Editoval enumag (21. 3. 2013 23:37)

- Šaman
 - Člen | 2668
 
Injectne se ta, která v configu nemá nastaveno: „autowired: no“.
Pokud u žádné nevypneš autowirování, tak ti to napíše, že neví,
kterou použít.
Viz dokumentace sekce Auto-wiring.
Editoval Šaman (21. 3. 2013 23:43)

- raketoplan2005
 - Člen | 147
 
@enumag: Ano, jsem vážně hlupák, máš pravdu, vím že to tak nemá být a ani to tak dělat nechci a nedělám. Mám normálně model, ale už je asi pozdě a napsal jsem co jsem napsal :-)
Takže když to vezmu odznovu – hledám vlastně to co jsi napsal v bodě 3 a na co navádí i @Šaman, ale pořád mi není jasné jak v konstruktoru rozlišit které to připojení se vybere.
V odkazované dokumentaci chápu tu situaci tak, že když se vypne
autowiring u jednoho typu, bere se automaticky ten co nemá vypnutý autowiring
a když potřebuju ten druhý, řeknu si v konstruktotu přímo o objekt
třídy DevNullStorage. Ale když jsou obě připojení ze stejné
třídy a jen používají jinou databázi na stejném serveru?

- David Matějka
 - Moderator | 6445
 
@raketoplan2005: jak pise @enumag, musis to nastavit v neonu, napr
services:
	foo: Bar(@database2)
				
- raketoplan2005
 - Člen | 147
 
A jo, dneska je super den. Díky všem, třeba to v budoucnu pomůže i někomu dalšímu.