Připojení do více mysql databází

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

Zdravím.

Chtěl bych se zeptat zda je možné v Nette připojení do více mysql databází.

Pokud ano, jak by měl vypadat config.neon a jakým způsobem se skládají dotazy a podle čeho se pozná na jakou databázi bude dotaz aplikován?

Děkuji

Glottis
Člen | 129
+
0
-

asi by to slo nejak takto, doufam :)

neon pro nette 2.1 a dibi

parameters:
	database1:
		driver: mysql
		host: localhost
		database: db
		username: user
		password: heslo
		charset: utf8
		profiler: true
		persistent: true
		lazy: true
	database2:
		driver: mysql
		host: localhost
		database: db
		username: user
		password: heslo
		charset: utf8
		profiler: true
		persistent: true
		lazy: true

services:
	database1:
		class: DibiConnection
		create: dibi::connect(%database1%)
		run: true
	database2:
		class: DibiConnection
		create: dibi::connect(%database2%)
		run: true
	model1: Model1(@database1)
	model2: Model1(@database2)

model1 a model2 pak budou mit ruzne db

Editoval Glottis (15. 4. 2013 9:10)

castamir
Člen | 629
+
0
-

Vycházím z quickstartu

nette:
    database:
        default:
            dsn: 'mysql:host=localhost;dbname=quickstart'
            user:
            password:
        jinaDB:
            dsn: 'mysql:host=localhost;dbname=jinadatabaze'
            user:
            password:

Jelikož definuješ 2 instance Nette\Database\Connection, tak budeš muset u všech služeb, kde některou z nich budeš chtít použít, explicitně určit, kterou instanci chceš.

services:
    taskRepository: Todo\TaskRepository(@nette.database.default)
    userRepository: Todo\UserRepository(@nette.database.jinaDB)
castamir
Člen | 629
+
0
-

Ještě dodám, že můžeš využít featury neonu a použít dědičnost. Příklad od @Glottis se s dědičností dá krásně zkrátit:

parameters:
	database1:
		driver: mysql
		host: localhost
		database: db
		username: user
		password: heslo
		charset: utf8
		profiler: true
		persistent: true
		lazy: true
	database2 < database1:
		database: db #tady muzu dat treba jen jiny nazev databaze

services:
	database1:
		class: DibiConnection
		create: dibi::connect(%database1%)
		run: true
	database2 < database1:
		create: dibi::connect(%database2%) #zmenim udaje k pripojeni oproti @database1
	model1: Model1(@database1)
	model2: Model1(@database2)
vEnCa-X
Člen | 6
+
0
-

Zdravím.
Připojení k více MYSQL databázím mi ve verzi 2.1dev nefunguje. Ve verzi 2.0.10 je to OK.
Mám databáze:

  • db1 (tabulka table1)
  • db2 (tabulka table2)
nette:
    database:
        default:
            dsn: 'mysql:host=127.0.0.1;dbname=db1'
            user: root
            password: root
            options:
                lazy: true


        db2:
            dsn: 'mysql:host=127.0.0.1;dbname=db2'
            user: root
            password: root
            options:
                lazy: true

services:
    - Db1(@nette.database.default)
    - Db2(@nette.database.db2)

Presenter:

/** @var Db1 @inject */
public $db1;

/** @var Db2 @inject */
public $db2;

	public function renderDefault()
	{
      $this->template->db1 = $this->db1->getAll();
      $this->template->db2 = $this->db2->getAll(); // ERROR
	}

Problém je u připojení do db2, ve kterém se dotaz pokouší vykonat na db1:

SQLSTATE[42S02]: Base table or view not found: 1146 Table ‚db1.table2‘ doesn't exist

Dělám něco špatne, nebo je chyba v Nette 2.1dev?
Problém jsem reportoval: https://github.com/…/issues/1053