【问题标题】:Can't change doctrine connection无法更改教义连接
【发布时间】:2014-12-19 15:37:13
【问题描述】:

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

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' 带有消息 'Unknown connection: prod-slave' in...

请注意,在这两种情况下,即使我将连接更改为本地连接,它仍在尝试连接到从属(在第一种情况下,它必须是从属,因为它是只读的)。

我也尝试过手动设置连接:

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

学说版本:1.2.3

Symfony 版本:1.3.9

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您正在与只读从属设备通信,并尝试执行更新/插入查询。因为它是只读的,所以你想要的是不可能的。要么连接到可写的 master,要么将你的复制更改为 master-master 系统。
  • 我正在从从站获取数据,然后更改当前与本地数据库的连接,但它仍在尝试将数据插入从站;这就是问题的全部。

标签: php mysql doctrine connection symfony1


【解决方案1】:

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

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

【讨论】:

  • 我不认为模型是默认绑定的。如果我一开始没有设置连接,它就已经是本地的了,但是一旦我把它切换到 prod-slave 我就不能再切换回本地了。
【解决方案2】:

不要使用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-slavelocal 两个连接,这应该可以工作。在您的模式文件中,您已将表绑定到适当的连接。 (以防万一有关连接的文档以及可以找到的所有内容here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2019-03-12
    相关资源
    最近更新 更多