použití více databazí a práce s nimi
- castamir
- Člen | 629
Připojení k databázi se nastavuje v configu. Zde si můžeš nastavit více různých připojení. Pro práci s databází (zejména ve tvém případě) je nanejvýš vhodné si vytvořit modely (vrstva obalující práci nad daty z db). Tyto modely se zaregistrují v configu jako služby a nastaví se jim údaje pro připojení k patřičné databázi.
jak upravit config v quickstartu, aby umožnil připojení k více databázím
nette:
database:
default:
dsn: 'mysql:host=localhost;dbname=prvi'
user:
password:
druha:
dsn: 'mysql:host=localhost;dbname=druha'
user:
password:
treti:
dsn: 'mysql:host=localhost;dbname=treti'
user:
password:
services:
taskRepository: Todo\TaskRepository(@nette.database.treti)
userRepository: Todo\UserRepository(@nette.database.druha)
listRepository: Todo\ListRepository(@nette.database.default)
- enumag
- Člen | 2118
Jediný problém je, že ty repository pak potřebuješ pomocí DI dostat do presenterů. A asi se ti dost často stane, že nějaké repository a tím i připojení se využije jen v konkrétní akci konkrétního presenteru. V případě DI je tohle problém protože připojení na tu databázi se vytvoří při injectu toho repository a nikoli líně až když se na tu databázi posílá nějaký dotaz (opravu @dg zatím blokuje). Tenhle problém částečně řeší výměna DI za service locator v presenterech (tam se ty repository vytváří lazy).