2011-05-25 109 views

回答

1

您可以使用的application.ini多個數據庫:

resources.db.master.adapter   = "PDO_MYSQL" 
resources.db.master.default   = false 
resources.db.master.params.dbname = "db1" 
resources.db.master.params.host  = "127.0.0.1" 
resources.db.master.params.username = "root" 
resources.db.master.params.password = "" 
resources.db.slave.adapter   = "PDO_MYSQL" 
resources.db.slave.default   = true 
resources.db.slave.params.dbname  = "db2" 
resources.db.slave.params.host  = "127.0.0.1" 
resources.db.slave.params.username = "root" 
resources.db.slave.params.password = "" 

而在你的引導初始化:

public function _initDatabase() { 
     $config = $this->getApplication()->getOption('resources'); 

     $dbArrays = array(); 
     foreach($config['db'] as $name => $dbConf){ 
      // Set up database 
      $db = Zend_Db::factory($dbConf['adapter'], $dbConf['params']); 
      $db->query("SET NAMES 'utf8'"); 
      $dbArrays[$name] = $db; 

      if((boolean)$dbConf['default']){     
       Zend_Db_Table::setDefaultAdapter($db); 
      } 
      unset($db); 
     } 

     Zend_Registry::set("db", $dbArrays); 
    } 

在我來說,我一直保存每個適配器在註冊表中,所以我可以使用它們稍後分開。 我還做了一類新的,像這樣擴展Zend_Db_Table類在那裏我有我自己的getAdapter($名):

public function getAdapter($name = null){ 
     if($name !== null){ 
      $dbAdapters = Zend_Registry::get('db'); 
      return $dbAdapters[$name]; 
     } 
     return parent::getAdapter(); 
    } 

隨着在每個模型我可以這樣做:

$this->getAdapter('slave')->fecthAll($sql); 
$this->getAdapter('master')->fecthAll($sql); 
1

在確定模塊之前就會讀取application.ini。我建議你忘記application.ini,而是嘗試編寫一個控制器插件,該控制器插件將根據選擇哪個模塊加載一些額外的配置。