Nette + Doctrine2 a víc než jedna databáze

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

Ahoj,

chtěl bych se zeptat zda je možné popř. jestli má někdo zkušenost s prací s Nette, Doctrine2 a minimálně 2 databázemi? Já bych jich potřeboval propojit celkem 5…

Nebo je to možné udělat s Nette/Database ? Popř. je na to nějaká jiná cool fičura?

Díky moc

K čemu to potřebuju: moje oblíbená MMO hra z roku 2007 má trochu starší model a nechce se mi předělávat komplet celá hra, stačí se jen hrabat v jádře a clientu a opravovat bugy. Abych to dělal odznova se mi fakt nechce, i když by to hře prospělo a ideální by byl port na Unreal4, ale měl to být projekt do volného času a ne full-time job :D

Jan Endel
Člen | 1016
+
+4
-

pokud používáš Kdyby/Doctrine, tak je to celkem jednoduché.

Stačí mít dvě vydefinované connection:

doctrine:
	default:
		host: localhost
		user: user1
		password: password1
		dbname: database1

	secondConfig:
		host: localhost
		user: user2
		password: password2
		dbname: database2

defaultně se všude bude autowirovat entityManager a podobné služby s configem default, pokud chceš v neonu pak druhou conneciton tak třeba takhle:

services:
	- Baz/FooBar(@doctrine.secondConfig.entityManager)

případně přímo v PHP:

use Kdyby\Doctrine\Registry;

class Foo
{
	public function __construct(Registry $registry)
	{
		$em = $registry->getManager('secondConfig');
    }
}

update schematu přes konzoli pak takto:

php app/console orm:schema:update --em=secondConfig --dump-sql
theacastus
Člen | 81
+
0
-

Super!

Děkuju, aneb vzhůru do (pro mě) neznámých vod! :D

Petr Parolek
Člen | 455
+
0
-

Ahoj,

zkouším to podle první varianty, ale příkaz php www/index.php orm:schema:update –force mi háže vše do defaltní databáze namísto do druhé, ale nette pracuje správně – tj. z druhé tabulky.

Kde je zrada prosím?

Oli
Člen | 1215
+
0
-

Nezapomněl jsi na --em=secondConfig?

Petr Parolek
Člen | 455
+
0
-

nezapomněl :o

Oli
Člen | 1215
+
0
-

Psal jsem z mobilu, proto jsem psal jen tak krátce.

Buď jsem něco přehlédl, nebo ty jsi to tam opravdu zapomněl zavolat. :) Podle mě příkaz
php app/console orm:schema:update --dump-sql pracuje s defaultní databází a příkaz php app/console orm:schema:update --em=secondConfig --dump-sql s databází v secondConfig.

Takhle to funguje z konzole. Pokud jsi v aplikaci, tak se to řídí podle toho, jaký entity manager si do service předáš. Takže pokud si předáváš vždy tu druhou databázi do service, tak to vždy použije secondConfig. No ale pak musíš zavolat --em=secondConfig i v konzoli.

Něco jsem špatně pochopil?

Editoval Oli (20. 3. 2017 19:40)