Prace s vice databazemi najednou
- marekjalovec
- Člen | 3
Zdravim panove a damy, narazil jsem ted na drobny problem: jak nejvice kosher
pracovat s vice databazemi najednou?
Oboje mam v neonu viz nize, jak ale korektne nainjectovat oboje do sluzby a
pracovat s tim?
Diky za pomoc!
database:
default:
dsn: 'mysql:host=127.0.0.1;dbname=<databaze1>'
user: <uzivatel1>
password: <heslo1>
db2:
dsn: 'mysql:host=127.0.0.1;dbname=<databaze2>'
user: <uzivatel2>
password: <heslo2>
- Oli
- Člen | 1215
Mohlo by fungovat něco jako:
database: @Nette\Database\Context
database2: @Nette\Database\Context(@nette.database.db2)
-Repository\MyRepository(@database, @database2)
class MyRepository
{
function __construct(\Nette\Database\Context $database, \Nette\Database\Context $database2)
{
$this->db1 = $database;
$this->db2 = $database2;
}
}
- marekjalovec
- Člen | 3
Funguje mi toto:
- App\Model\Manager(@nette.database.default, @nette.database.db2)
Nicmene by me zajimala inject metoda zapisu, je-li vubec mozna. Kdyz uz neco takoveho mame, je skoda se najednou zas vazat rucnim vyjmenovavanim…
- Jiří Nápravník
- Člen | 710
Inject automaticky podle me nepujde, jelikož je rozpoznáván podle interfacu, a tady máš u obou stejný, a tak není šance poznat který ti podsunout. Nicméně nejlepší by bylo to řešit podle mě tak, že si nadefinuješ jednu defaultní službu, kterou bude autowirovat, a pak druhoutu db2, te das v definici autowired: no a predas si ji rucne, kdyz ji budes potrebovat
- MartinitCZ
- Člen | 580
Řešil bych to tak, jak píše @**Jiří Nápravník**.
Udělat si DatabaseFactory, kam si přes constructor předáš loginy pro
db.
Uděláš si nějaký „magický“ getter a budeš to tahat přes
$this->databaseFactory->get('moje-prvni-database')
..