více instancí dibi – napojení na dva servery
- drakul
- Člen | 37
Zdravím, řeším problém, jak se připojit k více databázovým serverům současně pomocí dibi. Dibi, pokud se nemýlím, je návrhový vzor Singleton. Takže mě napadá řešení:
- připojit se na první server dibi::connect($config_server_one), provést sadu příkazů a pak se přepojit na druhý server dibi::connect($config_server_two) a zde provést druhou sadu. Bohužel bych ale potřeboval často i přístup k oběma serverům najednou / napřeskáčku, takže bych tohle „přepojení“ řešil několikrát během běhu aplikace. Nenapadá někoho ladnější způsob?
- napadlo mě vytvořit dvě instance dibi_one a dibi_two … ale nevím jestli to je programátorsky „čisté“ a jestli to vůbec lze?
Díky moc za odpovědi.
- Filip Procházka
- Moderator | 4668
- tohle neni dibi fórum
- dibi umí držet libovolný počet připojení a metoda
dibi::connect()
vraci to připojeni
$pripojeniJedna = dibi::connect($udaje, 'jedna');
$pripojeniDva = dibi::connect($udaje, 'dva');
Není to moc pěkné. Co takhle se na statickou obálku vykašlat?
$pripojeniJedna = new DibiConnection($udaje);
$pripojeniDva = new DibiConnection($udaje);
To vypadá mnohem lépe. Píšeš na Nette fórum, takže předpokládám, že používáš Nette. Co takhle z toho udělat služby?
db1:
username: foo
password: bar
db2:
username: foo
password: bar
services:
db1:
class: DibiConnection
arguments: ['%db1%']
db2:
class: DibiConnection
arguments: ['%db2%']
Super! A teď je můžeš volat v presenterech.
$result = $this->context->db1->query('SELECT * FORM');
foreach ($result ...
$this->context->db2->query('INSERT INTO ... ', $row);
Dobré, že? :)
- drakul
- Člen | 37
Tak přecijen ještě jeden problém. Kam s umístěním „variables“ db1
a db2 ?
Protože když je nastavím do „development < common:“, tak mi to
hází chybu:
Unknown environment variable 'db1'.
A když to zkusím hodit pod common: variable :, tak mi to píše:
Environment variable 'db1' is not scalar.
Díky za radu
- Filip Procházka
- Moderator | 4668
@**fojta**: Ano, ale chci vidět blázna, který by potřeboval dvě instance Doctrine.
@**drakul**: Musíš je odsadit, neboli dát před ně tabulátor, aby „patřily do sekce“.
Editoval HosipLan (10. 8. 2011 16:09)
- drakul
- Člen | 37
Problém vyřešen přechodem na nejnovější verzi Nette z GITu (čímž
se ovšem objevilo 200 nových problémů, což je ale vedlejší :-D ).
Ještě bych se rád zeptal, jak budu k servisům přistovat z modelu
(přecijen více použiju napojení na db v modelech než presenterech).
Díky za odpověď
- Filip Procházka
- Moderator | 4668
Na to ti asi nejjednodušeji odpoví https://pla.nette.org/…cy-injection