Можно ли настроить адаптер базы данных на постоянное использование из класса Zend_Db_Table_Abstract? - PullRequest
3 голосов
/ 07 мая 2009

У меня есть 2 базы данных, которые использует мой сайт, включая центральную базу данных пользователей, которая связана с другими базами данных, специфичными для сайта.

Иногда достаточно позвонить new User(array('db'=>'adapter1')); (но никогда не удобно); в других случаях, например, при объявлении отношений между таблицами в разных базах данных, сделать это невозможно.

Кто-нибудь знает способ указать, какой адаптер базы данных использовать из класса Zend_Db_Table_Abstract?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 23 сентября 2009

Возвращаясь к этому довольно поздно, но ни один из ответов здесь не сделал это для меня. Несколько моделей моей базы данных должны были использовать 'tdb', и для каждого из этих классов был добавлен следующий код, чтобы это происходило автоматически:

protected function _setupDatabaseAdapter()
{
    $this->_db = Zend_Registry::get('tdb');
    parent::_setupDatabaseAdapter();
}

Я благодарю всех за ваши предложения по пути!

3 голосов
/ 07 мая 2009

Zend_Db_Table_Abstract предоставляет статический метод для установки адаптера базы данных по умолчанию. Сделайте это следующим образом:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter);

Теперь все ваши объекты таблицы будут использовать ваш адаптер по умолчанию.

Примечание: онлайн-документы иногда не делают этого очевидным, поэтому ваше второе лучшее место для проверки - это API здесь:

1 голос
/ 16 августа 2010

Можно использовать функцию инициализации, она не используется в Zend_Db_Adapter_Abstract,, может использоваться в вашем классе для настройки того, что нужно сделать. _setAdapter принимает строку с именем ключа реестра.

public function init()
{
    $this->_setAdapter('tdb');
}
1 голос
/ 07 мая 2009

Вы можете установить переменную класса $ _db для правильного адаптера в конструкторе.

global $adapter1; //There are better ways than using a global variable

$this->_db = $adapter1;

Предполагается, что на объект адаптера можно ссылаться в конструкторе. Это не похоже на переносимость, но я верю, что это сработает.

...