použití více databazí a práce s nimi

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

Ahoj, chci se zeptat jakým způsobem by šlo vyřešit když bych měl např. 10 databazí a v nich x tabulek a v rámaci projektu bych chtěl všech těchto 10 db využívat. Jde toto nějak řešit. Nechci ani tak kód, spíše mi jde o myšlenku…díky za odpovědi

castamir
Člen | 629
+
0
-

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
+
0
-

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).