我正在尝试构建一个脚本,将项目从生产数据库导入到本地数据库,但是在将连接表单生产切换到本地时遇到了问题。
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
非常感谢任何帮助。
谢谢
答案 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)