Připojení ke dvěma DB v nette 2.3

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

Ahoj, chtěl jsem si zkusit nové Nette 2.3 ale narazil jsem hned na začátku – potřebuji do modelu předat dvě databáze.

Ve „starém“ nette 2.2.x jsem měl tuto konfiguraci která perfektně funguje:

config.local.neon:

nette:
	database:
		database_project_users:
			dsn: 'mysql:host=localhost;dbname=project_v8_users'
			user: nejaky_usertname
			password: nejaky_password
		database_project_tests:
			dsn: 'mysql:host=localhost;dbname=project_v8_tests'
			user: nejaky_usertname
			password: nejaky_password

config.neon:

services:
	authenticator: Authenticator(Nette\Database\Context(@nette.database.database_project_users), Nette\Database\Context(@nette.database.database_project_tests))
	- App\RouterFactory
	- Model\UniversalRepository(@container::getParameters())
	- Model\LogRepository(@nette.database.database_project_tests)
	- Model\TreeRepository(Nette\Database\Context(@nette.database.database_project_tests))
	- Model\TestRepository(Nette\Database\Context(@nette.database.database_project_tests))
	- Model\DroTestRepository(Nette\Database\Context(@nette.database.database_project_users), Nette\Database\Context(@nette.database.database_project_tests))
	- Model\ChartRepository(Nette\Database\Context(@nette.database.database_project_users), Nette\Database\Context(@nette.database.database_project_tests))
	- Model\UserRepository(Nette\Database\Context(@nette.database.database_project_users))
	- Model\EmailRepository()
	router: @App\RouterFactory::createRouter

a v modelu kde se předávají dvě DB jsem měl toto:
authenticator:

public function __construct(Nette\Database\Context $database, Nette\Database\Context $databaseTests, \Model\UniversalRepository $universalRepository) {
        $this->database = $database;
        $this->databaseTests = $databaseTests;
        $this->universalRepository = $universalRepository;
    }

DroTestRepository:

public function __construct(Nette\Database\Context $databaseUsers, Nette\Database\Context $databaseTests, \Model\UniversalRepository $universalRepository, \Model\ChartRepository $chartRepository) {
        $this->dbTests = $databaseTests;
        $this->dbUsers = $databaseUsers;
        $this->universalRepository = $universalRepository;
        $this->chartRepository = $chartRepository;
    }

atd…

Ale jakmile jsem toto provedl v nette 2.3, tak jsem dostal chybu:

Service ‚70_Model_DroTestRepository‘: Multiple services of type Nette\Database\IStructure found: database.database_project_users.structure, database.database_project_tests.structure

Toho jsem se zbavil tak že jsem v neonu zrušil u services Nette\Database\Context a v modelech jsem v konstruktorech změnil \context na \connection

Pak projekt naběhl ale jakmile bylo potřeba db (např. login – authenticator), tak nefungovaly dotazy pomoci ->table()…

Takže jsem v dokumentaci našel že asi musím udělat $this->db = new Nette\Database\Context($db) a tedy jsem zpřístupnil table, jenže to zase nejde – dostanu od laděnky facku že chybí nějaký IStructure a jsme tam kde jsme byli…

Nějaký nápad? Co dělám špatně? Díky

David Grudl
Nette Core | 8228
+
0
-

Opravil jsem to v masteru, ale stejně si máš místo Nette\Database\Context(@nette.database.database_project_tests) předávat @nette.database.database_project_tests.context nebo dnes už lze i @database.database_project_tests.context.

n.u.r.v.
Člen | 485
+
0
-

ok, díky – upravím si to…

n.u.r.v.
Člen | 485
+
0
-

Tak po úpravě v neonu na .context již project funguje…A když už jsem v tom psaní – první postřeh – nette 2.3 ukazuje v laděnce oproti verzi 2.2.7 asi o 4–6 MB více zabrané paměti…ale to už je na jiné téma…

Editoval n.u.r.v. (10. 2. 2015 11:57)