Zend Framework несколько баз данных - PullRequest
6 голосов
/ 30 мая 2010

В настоящее время я использую только одну базу данных с Zend Framework, но теперь мне нужно добавить ОДИН БОЛЬШЕ.

Я сейчас использую этот код:

public static function setupDatabase()
{
    $config = 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);
}

Какой код мне нужно написать для использования базы данных ONE MORE; и как я буду ссылаться на него, когда мне нужно будет сделать несколько запросов или около того ..

Ответы [ 4 ]

20 голосов
/ 30 мая 2010

Это включено в структуру как Zend_Application_Resource_Multidb.

7 голосов
/ 05 ноября 2011

поместите что-то вроде в вашем 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
2 голосов
/ 02 июня 2010

В моей ситуации у меня есть «основная» база данных, которая загружает информацию о клиенте, включая информацию о подключении к базе данных клиента. Основные настройки подключения находятся в application.ini. Весь код ниже находится в моей начальной загрузке.

Загрузка «основного» соединения (не установлено по умолчанию в ini):

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

После загрузки настроек из базы 'core' в реестр:

$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);
0 голосов
/ 29 сентября 2014

Я думаю, что это поможет вам

В файле applocation.ini

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

в файле начальной загрузки

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

подробное описание на http://www.tricksofit.com/2013/10/multiple-database-zend-framework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...