Připojení do více mysql databází
- Glottis
- Člen | 129
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
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
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
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