Nette\Database – table – načtení z jiné databáze

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

Ahoj,

mám klasicky nakonfigurovanou jednu Nette\Database a v jedné části kódu potřebuji pracovat s tabulkou v jiné databázi. Používal jsem:

$db->table("databaze.tabulka");

To dříve fungovalo skvěle, ale po aktualizaci (momentálně na nejnovější 2.3.8) to bohužel přestalo fungovat – nyní hlásí, že taková tabulka neexistuje. Dopídil jsem se, že je to způsobené touto změnou: https://github.com/…69ca1ef2595a#…

Je to chyba a měl by být takový zápis podporovaný nebo to ohýbám k něčemu, k čemu to není určeno? :)

GEpic
Člen | 566
+
-1
-

Důvod použití více databází? :)

CZechBoY
Člen | 3608
+
+3
-

Budeš si muset předat druhou instanci Nette\Database\Context – přes konstruktor ideálně.
v konfiguráku třeba:

database:
	mojeDb1:
		dsn: ...
		user: ...
		password: ...
	mojeDb2:
		dsn: ...
		user: ...
		password: ...

services:
	- App\MujSuperModel(@database.mojeDb1.context, @database.mojeDb2.context)

v php třídě potom:

namespace App;

use Nette\Database\Context;

class MujSuperModel
{
	protected $db1;
	protected $db2;

	function __construct (Context $db1, Context $db2)
	{
		$this->db1 = $db1;
		$this->db2 = $db2;
	}

	function getUsers ()
	{
		return $this->db1->table('user');
	}

	function getAdmins ()
	{
		return $this->db2->table('admin');
	}
}

Editoval CZechBoY (24. 2. 2016 17:46)