7

我有一个实体 A 与 B 的 ManyToOne 关系,但 A 和 B 不属于同一个数据库模式。

实体“A”属于 MyBundle 包,实体“B”属于 MyOtherBundle 包。

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

通过做 :

$this->objEm->getRepository('MyBundle:MyEntity')->find($id);

或者

$this->objEm->getRepository('MyBundle:MyEntity')->getMyResult($id);

我只调用我的一个存储库,我猜他无法获得另一个,因为在我的 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: ~

结果:哎呀,好像出了点问题。

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

“我知道它不存在,伙计,我想让你看看现在的好地方:比如在 FQCN\Of\MyOtherBundle\Entity\B”

如何强制通往我的实体“B”的路径?

4

2 回答 2

3

如果您的架构在同一个数据库中,那么只需将实体的表定义为

Bundle\Entity\Class:
    type: entity
    table: schema.class

(yaml)

您无需指定第二个连接。当明确指出模式时,这些连接在学说 2 中完美运行。

如果你的模式在不同的数据库中,你会遇到一些痛苦,因为每个连接都会查询两个数据库;对于多个记录连接,每个条目都将执行连接,这意味着您执行的查询数量与结果集中的对象数量成正比 (BAD)。

于 2012-12-18T20:38:42.300 回答
2

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

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

public function setB(B $objB) { //... }

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

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

于 2012-12-19T16:23:45.100 回答