ZF2主义共享实体池

时间:2013-02-19 17:20:40

标签: doctrine-orm zend-framework2

我在我的ZF2项目上使用Doctrine设置了一个多数据库连接,一个用于从数据库读取,另一个用于写入。

当单独使用时,一切都很好,但是当我尝试在同一个实体上使用它们时,例如:

找到用户:

$ user = $ this-> getReaderObjectManager () - > getRepository('Entity \ User') - > findOneBy(array('username'=>'xpto')) ;

然后尝试改变一些事情:

$这 - >的 getWriterObjectManager () - >坚持($用户); $用户> setBlabla( 'BLA');

然后尝试冲洗它:

$这 - >的 getWriterObjectManager () - >冲洗();

没什么'发生的。没有好处。

似乎 readerObjectManager writerObjectManager 拥有独立的“实体池”,所以我不能坚持并从另一个管理器中更改一个实体。

有没有办法将实体从一个管理器传递到另一个管理器,或引用它,或者两个管理器共享同一个“实体池”的简单方法?

提前感谢。

1 个答案:

答案 0 :(得分:1)

您不能在多个实体管理器中拥有托管实体:不受支持且可能导致意外行为。

如果确实需要将读取与写入分开,请使用主/从连接或通过实现自己的Doctrine\DBAL\Connection对象在连接级别执行此操作。

此外,读取通常不是通过ObjectManager处理,而是通过ObjectRepository处理(您可以在其中实现自定义内存中策略以优化读取操作)。

另一种处理方法是将实体从" read" ObjectManager并将它们合并回"写" ObjectManager

同样,我们不建议这样做,您应该在连接级别或更智能的存储库实现处理它,以满足您的需求。