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
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)