Jak na jednoduché použití více databází

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

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

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

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

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

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

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)