Zend_Db использует несколько баз данных? - PullRequest
0 голосов
/ 24 июня 2011

Есть ли способ использовать Zend_Db для обновления и вставки пересечения нескольких (двух) баз данных?Например,

UPDATE database1.tableA AS a1, databse2.tableA as a2 SET a1.content = a2.content WHERE a1.id = a2.id

Как я могу сделать это с Zend_Db_Adapter_Pdo_Mysql?

1 Ответ

1 голос
/ 24 июня 2011

В моем файле application.ini определено несколько баз данных

Я использовал что-то вроде этого:

// REGISTRY
Zend_Registry::set('configuration', $configuration);
foreach($configuration->database as $type => $database){
    $db[$type] = Zend_Db::factory(
        $database
    );
}
Zend_Registry::set('db', $db);

При создании вашей модели вы указываете, какую БД вы хотите в конструкторе моделей

$newModel = Model_NewModel($db['db_key_name']);

Затем у вас есть 3 варианта, вы можете вручную кодировать свой собственный объект для расширения Zend_Db_Table_Abstract и иметь функцию multi-db-update

/* the code for this example is pseudo code, so it probably wont work but the concept is still good */
class Model_NewModel extends MoakCustomDbClass{
    function multi_db_update($db1, $db2, $update, $where)
    {
        $originalDb = $this->_db;
        $this->_db = $db1;
        $this->update($update, $where);
        $this->_db = $db2;
        $this->update($update, $where);
        $this->_db = $originalDb;

    }
}

, напишите свой собственный запрос, позвонив

$newModel->query('UPDATE QUERY');

или работает 2 модели, указывающие на разные базы данных

$newModelA = Model_NewModel($db['db_key_name_A']);
$newModelB = Model_NewModel($db['db_key_name_B']);
...