Více databází a služba Context – možný bug

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

Zdravím,
pravděpodobně jsem našel bug (když tak mě opravte, pokud je to vlastnost ;-)).

V configu si nastavím více databází, něco ve smyslu:

database:
    db1:
        ...
    db2:
        ...

V aplikaci potom využívám Database\Context, takže služby nakonfiguruji v configu třeba takto:

- App\Model\Model1(@nette.database.db2.context)

Místo toho ale dostanu @nette.database.db1.context.

Konkrétně jsem to zkoušel na MySQL/MyISAM.

Je to bug, vlastnost nebo někde moje blbost?

Editoval vasam (9. 7. 2014 13:39)

David Matějka
Moderator | 6445
+
0
-

Verze nette? mne to funguje OK. A kde presne dostanes db1 misto db2? v konstruktoru toho Model1?

vasam
Člen | 26
+
0
-

Verze poslední stabilní: 2.2.2
Context, co dostane Model1 v konstruktoru je připojený na db1 místo db2.

Zatím to řeším tak, že si zaregistruji službu db2: Nette\Database\Context(@nette.database.db2), s tím už to samozřejmě funguje.

Editoval vasam (9. 7. 2014 14:38)

saimons
Člen | 293
+
0
-

To jsem tady psal pred par dny a nikdo mi neodpovedel, tak jsem to vyresil takhle: https://forum.nette.org/…m-do-dvou-db

David Matějka
Moderator | 6445
+
0
-

Divny, muzes zkusit izolovat chybu treba na sandboxu?

a podivej se prosim do vygenerovanyho kontejneru, jak se vytvari ta sluzba Model1
a zkus si primo z kontejneru vytahnout $container->getService('nette.database.db2.context')

saimons
Člen | 293
+
0
-

Co ja jsem zjistil, tak se spatne nastavi Connection ve tride DiscoveredReflection, nebere to v potaz druhou DB.

David Matějka
Moderator | 6445
+
+1
-

Ajo, uz to vidim. Defaultni hodnota je nazev tridy, ale kontrola probiha jen proti slovu discovered

jako hotfix uvedte k tem spojenim reflection: discovered, tedy:

database:
	db1:
		user: ...
		reflection: discovered
....
Tomáš Jacík
Člen | 146
+
0
-

Mám stejný problém, ale discovered mi nepomohlo.

database:
	default:
		dsn: 'mysql:host=mysql;dbname=test'
		user: test
		password: test
	altcz:
		dsn: 'mysql:host=mysql;dbname=test_cz_am'
		user: test
		password: test
		autowired: false
		reflection: discovered
	altsk:
		dsn: 'mysql:host=mysql;dbname=test_cz_pap'
		user: test
		password: test
		autowired: false
		reflection: discovered

services:
	advertiserRepository: App\Model\AdvertiserRepository( @nette.database.amcz.context )
SQLSTATE[HY000] [1044] Access denied for user 'test'@'%' to database 'test'
Tomáš Jacík
Člen | 146
+
0
-

Tak vyřešeno. Neuvědomil jsem si, že mu vadí ta db v UserManageru, měl jsem za to že se to defaultně připojuje lazy jak jsem se kdesi dočetl, což fakt nedělá. Tedy to s tím reflection: discovered jede.

hrach
Člen | 1836
+
0
-

@matej21 diky za napovedu.

je to fixnuto pro v2.2@dev i v2.3@dev (tj. master).

@TomasJancik muzes prosim udelat issue,pokud ti nejede lazy connection? diky

Tomáš Jacík
Člen | 146
+
0
-

hrach napsal(a):

@matej21 diky za napovedu.

je to fixnuto pro v2.2@dev i v2.3@dev (tj. master).

@TomasJancik muzes prosim udelat issue,pokud ti nejede lazy connection? diky

Ona jede, jen ne v defaultu, pokud ji do confu explicitně nezadám.