0

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

单独使用时一切正常,但是当我尝试在同一个实体上使用两者时,例如:

查找用户:

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

然后尝试改变一些东西:

$this-> getWriterObjectManager ()->persist($user); $user->setBlabla('bla');

然后尝试冲洗它:

$this-> getWriterObjectManager ()->flush();

什么都没有发生。不好。

似乎readerObjectManagerwriterObjectManager有他们独立的“实体池”,所以我不能坚持和改变另一个经理的一个实体。

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

提前致谢。

4

1 回答 1

1

您不能跨多个实体管理器拥有托管实体:这是不受支持的,并且可能导致意外行为。

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

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

处理此问题的另一种方法是将实体与“读取”分离ObjectManager并将它们合并回“写入” ObjectManager

同样,不建议这样做,您应该在连接级别或使用适合您需求的更智能的存储库实现来处理它。

于 2013-02-19T17:31:20.990 回答