Я использую классическое соединение, которое создается в bootstap, считывая параметры из файла application.ini. Я бы хотел использовать больше внешних БД, но я не могу их прочитать из application.ini. Я предпочитаю читать параметры из основной БД (какая внешняя БД это, зависит от веб-сайта). Итак, как эффективно установить соединение в модели? Теперь я устанавливаю это соединение каждый раз, когда мне нужно его использовать. И когда мне нужно использовать основную БД, необходимо снова установить соединение. Это очень неэффективное решение.Сделать второе подключение к внешней БД
function joinClientDB($id)
{
$web = $this->getById($id);
$dbSettings = array();
$dbSettings['host'] = $web['web_dbHost'];
$dbSettings['username'] = $web['web_dbUsername'];
$dbSettings['password'] = $web['web_dbPassword'];
$dbSettings['dbname'] = $web['web_dbName'];
$this->_db = Zend_Db::factory('pdo_mysql', $dbSettings);
$this->_db->query('SET CHARACTER SET ' . $web['web_dbCharset']);
}
function joinDefaultDb()
{
$this->_db = Zend_Registry::get('db');
}
Есть ли для меня какие-либо простые решения?
Похоже, что ваша конфигурация собирается позволить неограниченное количество конфигураций соединения db. С такой архитектурой ваши варианты с тем, что ZF может сделать, будут ограничены. Лучшее, на что вы можете надеяться, это построить плагин, который регистрирует правильные параметры БД с каждым запросом. – RockyFord
Теоретически да, но практически нет. Мне нужно подключение, первое основное (которое я загружаю с параметрами из application.ini) и второй дополнительный, какие параметры я должен получить из этого основного БД. В идеале я сделаю singleton в первых параметрах получения с соответствующей моделью. Я не знаю, хорошее ли это решение. Как на этом решении с плагином? – tomasr