Jak na jednoduché použití více databází
- Sighvat
- Člen | 3
Zdravíčko,
chtěl bych poprosit, zda by někdo byl ochoten napsat jednodochý a čistý příklad použití dvou a více databází. Potřebuji se jednoduše v modelech dostat k datům z jedné nebo druhé databáze (časem přibudou pravděpodobně další).
Pokud používám jen jednu databázi, tak je to jednoduché:
<?php
public function __construct(Nette\Database\Context $database)
{
$this->db = $database;
}
?>
Jak ale do tohoto konstruktoru dostat druhou databázi?
<?php
public function __construct(Nette\Database\Context $database)
{
$this->db = $database;
$this->db2 = ...;
}
?>
kterou mám v neonu zadefinovanou
<?php
database:
default:
dsn: 'mysql:host=127.0.0.1;dbname=db1'
user: username
password: *********
debugger: true
options:
lazy: yes
db2:
dsn: 'mysql:host=127.0.0.1;dbname=db2'
user: username
password: *********
debugger: true
options:
lazy: yes
?>
Předem díky za reakci. Prošel jsem desítky témat v tomto fóru, ale řešení jsem nenašel. Respektive našel jsem spoustu řešení na způsob tvorby modelu pro každou databázi, což ale nechci. Pokud to tedy není nutnost. :-)
- David Matějka
- Moderator | 6445
autowirovat pujde pouze jedno spojeni, dalsi musis predavat rucne
- MyRepository(@database.default.context, @database.db2.context)
ale radsi rekni k cemu potrebujes vetsi (a predem neznamy) pocet databazi?
- Sighvat
- Člen | 3
Díky za odpověď. Mohl bys to použití prosím trochu rozvést? Jak pak dostanu ty spojení do modelu?
Co se týče počtu databází. Máme Wordpress portál, phpBB3 fórum a teď bude ještě nová Nette aplikace. To jsou 3 databáze. Čtvrtá (v mém dotazu ta druhá) databáze bude centrální a bude obsahovat docela velké množství dat (interpreti, alba, skladby, texty atd.) a bude se k ní přistupovat jak z WP, tak z phpBB a Nette. Proto bych ji měl radši zvlášť, nehledě na omezení velikosti pro jednu databázi na mém hostingu.
Editoval Sighvat (29. 10. 2014 21:03)
- Sighvat
- Člen | 3
No, tak nějak jsem to dal dokupy. Je to tak OK? .) Fungovat funguje.
config.neon
services:
- App\Model\MyModel(@database.default.context, @database.db2.context)
App\Model\MyModel:
/** @var Nette\Database\Context */
private $db;
/** @var Nette\Database\Context */
private $music_db;
public function __construct(Nette\Database\Context $database, Nette\Database\Context $database2)
{
$this->db = $database;
$this->music_db = $database2;
}
Editoval Sighvat (29. 10. 2014 21:39)
- LuBoss
- Člen | 21
To matej21: On neříká, že má předem neznámý počet databází, ale jenom, že teď používá dvě a do budoucna jich bude víc. Pak by upravil config.neon a model dle aktuálního stavu DB.
Já bych se chtěl ale zeptat na jednodušší věc. Jak správně předat dvěma různým modelům každému jiné (jenom jedno) spojení k DB? To se dělá tak, že se oba modely zapíší do config.neon jako služby?
- Ot@s
- Backer | 476
LuBoss napsal(a):
Já bych se chtěl ale zeptat na jednodušší věc. Jak správně předat dvěma různým modelům každému jiné (jenom jedno) spojení k DB? To se dělá tak, že se oba modely zapíší do config.neon jako služby?
Přesně tak:
- MyFirstRepository(@database.default.context)
- MySecondRepository(@database.db2.context)