无法改变学说联系

时间:2014-12-19 15:37:14

标签: php mysql doctrine connection symfony1

我正在尝试构建一个脚本,将项目从生产数据库导入到本地数据库,但是在将连接表单生产切换到本地时遇到了问题。

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

非常感谢任何帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

如果检查模型的生成基类,则在开始时您将看到每个模型都绑定到特定连接。因此,即使您将当前连接设置为另一个连接,也会使用一个绑定。

解决方案是为每个模型调用Doctrine_Manager::getInstance()->bindComponent($component, 'local');

答案 1 :(得分: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 / databases.yml中,您可以正确设置两个连接 prod-slave local 。在您的架构文件中,您已将表绑定到适当的连接。 (以防万一关于连接的文档和所有可以找到的文件here