开发者

Zend Framework multiple databases

I'm currently using only one database with Zend Framework, but now I have to add ONE MORE.

I'm using this code right now:

public static function setupDatabase()
{
    $c开发者_开发知识库onfig = self::$registry->configuration;
    $db = Zend_Db::factory($config->db->adapter, $config->db->toArray());
    $db->query("SET NAMES 'utf8'");
    self::$registry->database = $db;
    Zend_Db_Table::setDefaultAdapter($db);
}

What code do I need to write in order to use ONE MORE database; and how I will reference it, when I need to make some queries or so..


This is included in the framework as Zend_Application_Resource_Multidb.


place something like in your application.ini

  [production]

  resources.multidb.db1.adapter = "pdo_mysql"

  resources.multidb.db1.host = "localhost"

  resources.multidb.db1.username = "webuser"

  resources.multidb.db1.password = "XXXX"

  resources.multidb.db1.dbname = "db1"



  resources.multidb.db2.adapter = "pdo_pgsql"

  resources.multidb.db2.host = "example.com"

  resources.multidb.db2.username = "dba"

  resources.multidb.db2.password = "notthatpublic"

  resources.multidb.db2.dbname = "db2"

  resources.multidb.db2.default = true


In my situation, I have a 'core' database that loads customer info, including the customer's database connection info. The core connection settings are in the application.ini. All the code below is in my bootstrap.

Loading 'core' connection (not set to default in ini):

$db_core = $this->getPluginResource('db')->getDbAdapter();
$db_core->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Registry::set('db_core', $db_core);

After settings are loaded from 'core' database into the registry:

$settings = Zend_Registry::get('settings');
$db = Zend_Db::factory(
    $settings->db_adapter,
    array(
        'host' => $settings->db_host,
        'username' => $settings->db_user,
        'password' => $settings->db_pass,
        'dbname' => $settings->db_name,
    )
);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);


I think it will help you

In applocation.ini file

resources.multidb.db1.adapter = "pdo_mysql"
resources.multidb.db1.host    = "localhost"
resources.multidb.db1.username  = "root"
resources.multidb.db1.password  = ""
resources.multidb.db1.dbname   = "db1"
resources.multidb.db1.charset = "utf8"
resources.multidb.db1.driver_options.1002 = "SET NAMES utf8"
resources.multidb.db1.default = true

resources.multidb.db2.adapter = "pdo_mysql"
resources.multidb.db2.host = "localhost"
resources.multidb.db2.username = "root"
resources.multidb.db2.password = ""
resources.multidb.db2.dbname   = "db2"
resources.multidb.db2.charset = "utf8"
resources.multidb.db2.driver_options.1002 = "SET NAMES utf8"
resources.multidb.db2.default  = false

in bootstrap file

protected function _initDbAdaptersToRegistry()
{
    $this->bootstrap('multidb');
    $resource = $this->getPluginResource('multidb');

    $Adapter1 = $resource->getDb('db1');
    $Adapter2 = $resource->getDb('db2');     
    Zend_Registry::set('db1', $Adapter1);
    Zend_Registry::set('db2',$Adapter2);
}

more description on http://www.tricksofit.com/2013/10/multiple-database-zend-framework

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜