Připojení ke dvěma DB v nette 2.3
- n.u.r.v.
- Člen | 485
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
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
.