NDB pripojenie k dvom databázam

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

Ako na pripojenie NDB k dvom databázam ?

PHP	7.0.5
Nette 2.3.10
Server	Microsoft-IIS/7.5

config.neon

database:
	web:
		dsn: 'mysql:host=%web.host%;dbname=%web.database%'
		user: %web.username%
		password: %web.password%
		debugger: true
		explain: true
		autowired: true
		reflection: discovered

	msi:
		dsn: "sqlsrv:server=10.168.136.213;database=msi"
		user: %msi.username%
		password: %msi.password%
		debugger: true
		explain: true
		autowired: false

services:
	router: App\RouterFactory::createRouter
	- App\Model\BaseModel(@database.web, @database.msi)
	- App\Model\LogUsersHistoryModel

BaseModel.php

<?php
namespace App\Model;

use Nette;

class BaseModel extends Nette\Object
{

    public $dbWeb;
    public $dbMsi;

    public function __construct(Nette\Database\Context $dbWeb, Nette\Database\Context $dbMsi)
    {
        $this->dbWeb = $dbWeb;
        $this->dbMsi = $dbMsi;

    }
}

V $this->dbMsi stále dostanem len prvú tú prvú "@database.web" (autowirovanú).

CZechBoY
Člen | 3608
+
0
-

Měl bys uvést ještě .context.

    - App\Model\BaseModel(@database.web.context, @database.msi.context)
David Matějka
Moderator | 6445
+
0
-

ty to nastavujes sluzbe BaseModel, nikoliv te LogUsersHistoryModel

sepo
Člen | 69
+
0
-

CZechBoY napsal(a):

Měl bys uvést ještě .context.

David Matějka napsal(a):

ty to nastavujes sluzbe BaseModel, nikoliv te LogUsersHistoryModel

takže by to malo byť :

services:
	router: App\RouterFactory::createRouter
	#- App\Model\BaseModel(@database.web.context, @database.msi.context)
	- App\Model\LogUsersHistoryModel(@database.web.context, @database.msi.context)
	- App\Model\Potomok2BaseModelu(@database.web.context, @database.msi.context)
	- App\Model\Potomok3BaseModelu(@database.web.context, @database.msi.context)

u každého potomka BaseModel-u predať context ?

dík

Unlink
Člen | 298
+
+2
-

Ono by sa to dalo trochu zjednodušiť pomocou decoratora, aj keď to nieje moc čisté riešene.

class BaseModel extends Nette\Object
{

    public $dbWeb;
    public $dbMsi;

    public function injectDbContexts(Nette\Database\Context $dbWeb, Nette\Database\Context $dbMsi)
    {
        $this->dbWeb = $dbWeb;
        $this->dbMsi = $dbMsi;

    }
}
decorator:
	App\Model\BaseModel:
		setup:
			- injectDbContexts(@database.web.context, @database.msi.context)

services:
    router: App\RouterFactory::createRouter
    - App\Model\LogUsersHistoryModel
    - App\Model\Potomok2BaseModelu
    - App\Model\Potomok3BaseModelu
CZechBoY
Člen | 3608
+
0
-

:o tohle fakt jde?
Tak to si jdu taky predelat v projektu :-)
Dik