我使用的Symfony2中的Doctrine2主/从配置规模我在单个主数据库和几个只读(复制)的奴隶应用。
这从我的应用程序中完美的作品和Doctrine2合理使用的只读查询的从属单元,并写入操作的高手。
如果在我的控制器之一,我写道:
$em = $this->get('doctrine')->getManager();
var_dump($em->getConnection()->isConnectedToMaster());
isConnectedToMaster()
返回false
- 这是我所期望的,因为从被默认连接。
这也是如此,如果我一个WebTestCase
中运行这些代码
但是,如果我写了一个Symfony的控制台命令(ContainerAwareCommand)中完全相同的代码:
$em = $this->getContainer()->get('doctrine')->getManager();
var_dump($em->getConnection()->isConnectedToMaster());
isConnectedToMaster()
返回true。这意味着主被选择作为默认值。
我不能找出如何从控制台命令停止默认的连接是高手。这意味着如果我想从控制台运行一些非关键的,繁重的数据处理任务 - 他们都打到主(坏)的奴隶(好)的一个也没有。
任何人都知道我怎样才能使Doctrine2从控制台默认使用的奴隶?或者知道为什么它总是默认为高手?
回答说:感谢nifr谁把我在正确的道路 - 我发现,我的问题是因为我使用JMS \ JobQueueBundle(代替使用的应用程序/控制台具有改变一个应用程序,它必须连接到MasterSlaveConnection方式,也迫使“主”被选择)。当我注释掉
use JMS\JobQueueBundle\Console\Application;
在app/console
,从我的控制台测试正确选择。
谢谢
你必须确保你的命令不调用,让学说选择主任何行动。
重要的是,MasterSlaveConnection
的理解应该是,当它挑选的从机或主机方式和时间。
(Qazxswpoi)
我结束了对这个问题的时候我一直在寻找一种方法来查询要么我对书面方式或主我读的奴隶。
这里是神奇的:
$em->getConnection->executeUpdate(...);