Více databází v aplikaci za pomoci Model Loaderu

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

Chtěl bych se zeptat jak nejlépe řešit ModelLoader když se v aplikaci používá víc mysql databází? Doteď jsem to měl tak trochu prasácky a teď po tom, co se mi osvědčil tento model, chtěl bych to předělat do něčeho takového. Udělat více ModelLoaderů pro každou db nebo udělat pro každou db v modelu vlastní dbconnection? Jinak jde o to že je jedna databáze kde mám webový účet pod kterým mám na dalších databázích herní účty (L2,WOW,AION,atd..)

//EDIT tak jsem to vyřešil takhle

class ModelLoader extends Object {

    private $dbConnection = array('web' => NULL,'so' => NULL,'aso' => NULL,'am' => NULL); //TODO WOW atd...
    private $models = array();

    public function getModel($model) {
	$server = 'web';
	if(strpos($model,':'))
	    list($server,$model) = explode(':',$model);
	if (!isset($this->models[$model])) {
	    $class = '\\'.ucfirst($server).'\\'.ucfirst($model);
	    $model = $server.':'.$model;
	    $this->models[$model] = new $class($this->getConnection($server));
	}

	return $this->models[$model];
    }

   /* public function __construct() {
	$this->dbConnect();
    }*/

    public function getConnection($server) {
	return (null === $this->dbConnection[$server]) ? $this->dbConnect($server) : $this->dbConnection[$server];
    }

    private function dbConnect($server) {
	$cfg = Environment::getConfig($server.'database');
	$conn = new Connection($cfg->driver . ':host=' . $cfg->host . ';dbname=' . $cfg->database, $cfg->username, $cfg->password);
	return $this->dbConnection[$server] = $conn;
    }

}

A pak v presenteru volám např $this->getModel(‚as:Account‘);

Editoval Marax (18. 4. 2011 9:00)