2010-05-30 43 views
6

Tôi hiện đang chỉ sử dụng một cơ sở dữ liệu với Zend Framework, nhưng bây giờ tôi phải thêm MỘT THÊM.Zend Framework nhiều cơ sở dữ liệu

Tôi đang sử dụng mã này ngay bây giờ:

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

đang làm gì tôi cần phải viết để sử dụng cơ sở dữ liệu ONE MORE; và cách tôi sẽ tham chiếu, khi tôi cần thực hiện một số truy vấn hoặc như vậy ..

+1

Hãy xem bài viết này cho một số ý tưởng: http: //www.amazium .com/blog/zendapplication-multiple-databases – nuqqsa

+0

Nếu một trong những câu trả lời đã giúp bạn Uffo, bạn nên đánh dấu nó là chấp nhận ... – Sonny

Trả lời

2

Trong trường hợp của tôi, tôi có cơ sở dữ liệu 'cốt lõi' tải thông tin khách hàng, bao gồm thông tin kết nối cơ sở dữ liệu của khách hàng. Cài đặt kết nối lõi nằm trong số application.ini. Tất cả các mã dưới đây là trong bootstrap của tôi.

Đang tải kết nối 'lõi' (không được đặt để mặc định trong ini):

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

Sau khi thiết lập được nạp từ 'lõi' cơ sở dữ liệu vào 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); 
7

nơi một cái gì đó giống như trong bạn 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 
0

Tôi nghĩ nó sẽ giúp bạn

Trong file 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 

trong file bootstrap

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); 
} 
hơn

mô tả trên http://www.tricksofit.com/2013/10/multiple-database-zend-framework

Các vấn đề liên quan