Doctrine 将实体管理器绑定到Symfony2中的实体?

Doctrine 将实体管理器绑定到Symfony2中的实体?,doctrine,symfony,bundle,entitymanager,Doctrine,Symfony,Bundle,Entitymanager,我的Symfony2框架中有两个捆绑包: 一个包含用户实体的“MainBundle”和一个包含问题跟踪系统所有内容的“TicketBundle”。在这种情况下,只有实体“Pool”和“Mappingpooluser”才是重要的。 它们都使用不同的实体管理器,因为我必须使用两个不同的数据库。(请参见下面的my config.yml) 现在我有了一个实体(Mappingpooluser),它需要一个MainBundle实体(User)和一个TicketBundle实体(Pool)(以及一些不重要的东

我的Symfony2框架中有两个捆绑包: 一个包含用户实体的“MainBundle”和一个包含问题跟踪系统所有内容的“TicketBundle”。在这种情况下,只有实体“Pool”和“Mappingpooluser”才是重要的。 它们都使用不同的实体管理器,因为我必须使用两个不同的数据库。(请参见下面的my config.yml)

现在我有了一个实体(Mappingpooluser),它需要一个MainBundle实体(User)和一个TicketBundle实体(Pool)(以及一些不重要的东西):

到目前为止,一切正常:) 我可以通过获取控制器中的Mappingpooluser实体

 $em = $this->getDoctrine()->getEntityManager("ticket");
 $entities = $em->getRepository('XXXTicketBundle:Mappingpooluser')->findAll();
如果我调用$entities[0]->getPool()->getId(),我将获得池的正确ID(如上所述:池与Mappingpooluser位于同一个捆绑包中),但是如果我调用$entities[0]->getUser()->getId(),我将得到一个错误:

 SQLSTATE[42S02]: Base table or view not found: 1146 Table 'm_ticketbundle.User' doesn't exist 
这是正确的,因为用户表位于另一个数据库(m_symfony)中


长话短说:如何让Symfony2为池使用票证实体管理器,为用户使用默认实体管理器???

您的场景的实际问题是,您需要将同一实体(池)映射到两个不同的实体管理器(默认和票证)。在此场景中,我建议您在实体层中为此实体创建层次结构:

  • 基本池,包含所有公共字段
  • 池“default”,包含默认em的专用字段
  • 池“ticket”,包含用于ticket em的专用字段
然后,您可以将它们映射到不同的实体管理器中。如果对默认实体和票证实体使用两个不同的名称空间,则可以指定在em配置中加载映射的文件夹,如下所示:

mappings:   
  MyBundle:
    type: annotation
    dir: Path/To/Entities

该路径相对于捆绑包的根目录。例如,您可以拥有实体/默认名称空间和实体/票证名称空间,并在实体名称空间中的未映射类中具有公共字段时将它们独立映射。

您的场景的实际问题是,您需要将同一实体(池)映射到两个不同的实体管理器(默认和票证)。在此场景中,我建议您在实体层中为此实体创建层次结构:

  • 基本池,包含所有公共字段
  • 池“default”,包含默认em的专用字段
  • 池“ticket”,包含用于ticket em的专用字段
然后,您可以将它们映射到不同的实体管理器中。如果对默认实体和票证实体使用两个不同的名称空间,则可以指定在em配置中加载映射的文件夹,如下所示:

mappings:   
  MyBundle:
    type: annotation
    dir: Path/To/Entities

该路径相对于捆绑包的根目录。例如,您可以拥有实体/默认名称空间和实体/票证名称空间,并独立映射它们,同时在实体名称空间中的未映射类中具有公共字段。

非常感谢,工作非常完美;拯救了我的一天:)非常感谢你,工作完美;救了我一天:)
mappings:   
  MyBundle:
    type: annotation
    dir: Path/To/Entities