Vyber medzi viacerymi databazami
- steelbull
- Člen | 241
Na hlavnej stranke, ktora sa defaultne zobrazuje mam login. Pod username a password chcem pridat select polozku database, do ktorej sa aplikacia bude pripajat. Samotny login sa bude kontrolovat voci databaze, ktora bola vybrata.
Nepotrebujem mat pripojene obidve DB sucasne, chcem mat jeden DB Context, ktory bude instancovat bud connenction jednej alebo druhej DB.
Tiez potrebujem ziskat ziskat zoznam databaz, ktore su na vyber (z neonu) a zobrazit ich v selecte na login page.
Dakujem za odpovede :-)
- CZechBoY
- Člen | 3608
S čim konkrétně máš problém? Každou databázi si nějak identifikuješ a ten identifikátor si někam uložíš (třeba do session). Pak v databázi budeš mít tabulku se seznamem názvů databází (tak aby tomu uživatel rozuměl) + id. V config.local.neon budeš mít konfiguraci těch databází. Databázi si pak můžeš vytáhnout z nějakýho manažera, kterej podle toho id vrátí správnou instanci databázi. Takže asi místo typehintování databáze budeš muset používat ten manažer a jeho se ptát na „dej mi správnou databázi pro tohohle uživatele“.
- steelbull
- Člen | 241
@CZechBoY Diky za rýchlu odpoveď. Zatiaľ mám toto. Upravil som neon nasledovne:
database:
main:
dsn: 'mysql:host=127.0.0.1:3306;dbname=databaza1'
user: 'root'
password: 'password'
debugger: true
explain: true
reflection: discovered
autowired: true
test:
dsn: 'mysql:host=127.0.0.1:3306;dbname=databaza2'
user: 'root'
password: 'password'
debugger: true
explain: true
reflection: discovered
autowired: true
Vyhadzuje mi to exception:
Multiple services of type Nette\Database\Context found...
Potreboval by som nejak nastavit, aby Context pouzival bud jednu alebo druhu DB.
Editoval steelbull (18. 5. 2018 13:18)
- David Matějka
- Moderator | 6445
mohlo by fungovat neco jako:
database:
dsn: '' # jen aby se to inciializovalo
services:
- ConnectionFactory
database.default.connection:
create: @\ConnectionFactory::createConnection()
class ConnectionFactory
{
public function createConnection()
{
// tady si to treba vytahnes z session nebo z post dat.
$dsn = ...;
$user = ...;
$password = ...;
return new Nette\Database\Connection($dsn, $user, $password);
}
}