【问题标题】:Doctrine2 / Symfony2 - Multiple entities on same tableDoctrine2 / Symfony2 - 同一张桌子上的多个实体
【发布时间】:2013-08-14 21:33:53
【问题描述】:

在 Symfony2 应用程序中,我有一个 MainBundle 和可以启用或不启用的不同捆绑包。在 MainBundle 中,我需要有 Model 和一个基本的 Entity。在 OtherBundle 中的 Entity 与 MainBundle 中的 Entity 具有相同的表名。

MainBundle 中的 Fixtures 需要加载或不加载 MainBundle 以外的其他包:

MainBundle
- Model 
- Entity (Table name "test")
- Fixtures 

OtherBundle
- Entity (Table name "test")
- Fixtures

OtherBundle2
- Entity (Table name="test")
- Fixtures

如果我将 @ORM\MappedSuperclass 用于 Model,则 @ORM\Entity 用于 Entity > MainBundle 和 OtherBundle 中的 @ORM\Entity 然后 Doctrine2 停止并出现错误“表已存在”。

我不能使用继承表,因为我的模型不需要知道其他包中的其他实体。 @ORM\DiscriminatorMap 不能指向 OtherBundle。

有没有办法做到这一点?

【问题讨论】:

  • 这个链接展示了如何在不同包中的实体之间建立动态关系。我不需要链接来自不同捆绑包的实体。我想在不同的包中拥有相同的实体名称和表。
  • 您好,您的问题的明显解决方案是创建一个不同的实体(具有不同的表名)。您可以从同一模型扩展。这很明显,因为您说您不能进行继承,所以就数据库而言,您也不能。 (因为您使用的是 ORM)没有您的逻辑,我无法为您提供更准确的帮助。
  • 我不明白:如果它是同一个实体和同一个表,为什么不把它放在主包中并使用它其他捆绑包。我没有看到捆绑包之间存在单向依赖的问题。
  • 我也有同样的问题。我有多个指向同一张表的实体。我用它来集中我的上传。它可以工作,但由于外键,我无法删除项目

标签: symfony doctrine-orm multiple-inheritance mappedsuperclass


【解决方案1】:

正如 Jasper N. Brouwer 所提到的,它本质上是同一个实体和同一个表,所以做你想做的事情是没有意义的。

在一个名为“SharedEntityBundle”的包中创建您的实体,并使用 resolve_target_entity 与其他包中的该实体相关联,而他们彼此不知道。

http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html

话虽如此,似乎有多个实体管理器的解决方案: Symfony 2 / Doctrine 2: Two Entities for the same table, use one in favour of the other

【讨论】:

  • 您能否解释一下如何将解析的实体用作对象(即在控制器中,就好像我在捆绑包中只有一个常规实体一样)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
相关资源
最近更新 更多