如何使用多个数据库模式管理Doctrine查询

use*_*526 7 php doctrine-query symfony doctrine-orm

我有一个实体A,其关系是ManyToOne与B,但A和B不属于同一个DB模式.

实体"A"属于MyBundle包,实体"B"属于MyOtherBundle包.

官方文档说明了如何使用不同的连接:多个模式=多个实体管理器.但就我而言,我想加入两个实体.

通过做 :

$this->objEm->getRepository('MyBundle:MyEntity')->find($id);
Run Code Online (Sandbox Code Playgroud)

要么

$this->objEm->getRepository('MyBundle:MyEntity')->getMyResult($id);
Run Code Online (Sandbox Code Playgroud)

我只调用我的一个存储库,我猜他无法得到另一个,因为在我的config.yml中我只能选择一个连接.

doctrine:
  dbal:
   connections:
     connection1:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema1_user%"
       password: "%database_schema1_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"
     connection2:
       driver:   "%database_driver%"
       host:     "%database_host%"
       port:     "%database_port%"
       dbname:   "%database_name%"
       user:     "%database_schema2_user%"
       password: "%database_schema2_password%"
       service:  "%database_service%"
       charset:  "Windows-1252"

orm:
  entity_managers:
    em1:
      connection:       connection1
      mappings:
              MyBundle: ~
              MyOtherBundle: ~
    em2:
      connection:       connection2
      mappings:
              MyOtherBundle: ~
Run Code Online (Sandbox Code Playgroud)

结果:糟糕,看起来出了问题.

1/1ReflectionException:类FQCN\Of\MyBundle\Entity\B不存在...

"我知道它不存在,我希望你现在看看好地方:比如在FQCN\Of\MyOtherBundle\Entity\B"

如何强制实体'B'的路径?

use*_*526 2

问题解决了 !它与数据库模式或注释完全无关。

在实体 A 中,我的个人设置者之一强制输入参数:

public function setB(B $objB) { //... }
Run Code Online (Sandbox Code Playgroud)

...我忘了使用 B 的 FQCN !这就是为什么它使用A的原因。

下次我不会在注释中声明 FQCN 来迫使我在课程开始时使用它!:)