Prace s vice databazemi najednou

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

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

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

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

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

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