Не могу изменить связь доктрины

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

Doctrine_Manager::getInstance()->setCurrentConnection('prod-slave');
// execute query to get data from production, confirm it worked

Doctrine_Manager::getInstance()->setCurrentConnection('local');
// insert data into local database

Когда я запускаю это, я получаю эту ошибку:

Неустранимая ошибка PHP: необработанное исключение «Doctrine_Connection_Mysql_Exception» с сообщением «SQLSTATE [HY000]:
Общая ошибка: 1290 Сервер MySQL работает с —read-only
вариант, поэтому он не может выполнить этот оператор «в …

Если я закрываю соединение с prod-slave, прежде чем установить его на локальный, я получаю:

Неустранимая ошибка PHP: необработанное исключение «Doctrine_Manager_Exception» с сообщением «Неизвестное соединение: prod-slave» в …

Обратите внимание, что в обоих этих случаях он все еще пытается подключиться к ведомому, даже если я изменил соединение на локальное (в первом случае это должно быть ведомое устройство, поскольку оно доступно только для чтения).

Я также попытался вручную установить соединения с:

Doctrine_Manager::connection('mysql://path');

Версия доктрины: 1.2.3

Версия Symfony: 1.3.9

Любая помощь приветствуется.

Спасибо

4

Решение

Если вы проверите сгенерированные базовые классы для своих моделей, в самом начале вы увидите, что каждая ваша модель привязана к определенному соединению. Таким образом, даже если вы установите текущее соединение с другим, будет использоваться одна граница.

Решение позвонить Doctrine_Manager::getInstance()->bindComponent($component, 'local'); для каждой из ваших моделей.

0

Другие решения

Вместо того, чтобы использовать setCurrentConnection попробуйте использовать getConnection

$slave = Doctrine_Manager::getInstance()->getConnection('prod-slave');
$result1 = $slave->execute($some_sql);

$local = Doctrine_Manager::getInstance()->getConnection('local');
$result2 = $local->execute($some_other_sql);

у меня работает над проектом symfony 1.4.

Это должно работать при условии, что в вашем config / database.yml у вас есть два соединения прод-рабыня а также местный правильно настроен. И в ваших файлах схемы вы привязали свои таблицы к соответствующим соединениям. (На всякий случай документ на связи и все что можно найти Вот )

0

По вопросам рекламы [email protected]