2012-07-13 53 views

回答

25

使用不同的对象管理器(实体管理器)不允许对象图相交。这种情况太复杂了,不受Doctrine ORM管理。

如果你需要这样的情况下,保持通过保存相关对象(老款),而不是给他们一个参考的标识断开连接的对象图,然后通过人工服务得到的对象。你可以在example of connection between Doctrine2 ORM and Doctrine2 MongoDB ODM找到一个相当好的例子。或者,您也可以使用@PostLoad事件侦听器,通过在示例中链接的存储库创建链接来填充实体中的数据。 @PostPersist(它应该提取相关对象的标识符),但要注意这种技术会变得非常混乱。另外,如果您的RDBMS支持单个主机上的跨数据库操作,那么您可以只使用一个EntityManager,并使用@ORM\Table(name="schemaname.tablename")来引用其他表。

+6

*如果你的RDBMS支持一台主机上的跨数据库操作,你可以只使用一个单一的EntityManager并引用其他表*。优秀的建议。谢谢! – noisebleed 2012-12-24 15:17:16

+2

发现当仅使用一个实体管理器和多个数据库时,Doctrine只检测'default_connection'表中的模式更改。任何想法解决这个问题? – noisebleed 2012-12-25 23:26:49

+1

@noisebleed from the docs: $ php app/console doctrine:schema:update --force --em = customer。在这里阅读更多:http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html – apfz 2015-08-10 13:57:07