【问题标题】:Extending a Doctrine entity to add extra association mapping in Symfony2扩展 Doctrine 实体以在 Symfony2 中添加额外的关联映射
【发布时间】:2014-06-06 11:18:24
【问题描述】:

我的组件中目前有一个用户准则实体和模型。我有一个用户捆绑包,可以处理与用户、CRUD 等合作的基础知识。

我正在开发一个资源分配包,我想扩展我的用户实体以添加额外的关联而不更改原始用户。那么 ResourceAllocation Bundle 将与 User Bundle 完全分离。

我已经设置了 BaseUser 的映射超类,包括 User 和 SkilledUser(来自资源分配包的那个)。但是,这会尝试为 User 和 SkilledUser 创建一个不需要的表。

用户和熟练用户可能是同一个用户,所以单表继承是行不通的。

实际上,最终结果应该是一张包含用户的表。

如果答案可以保持这种方法,我们正在使用 YAML,那就太好了。

【问题讨论】:

  • 那么像class SkilledUser extends User {}那样扩展它怎么样?
  • 在这种情况下,用户是否也必须是映射的超类?

标签: php symfony orm doctrine-orm single-table-inheritance


【解决方案1】:

“实际上,最终结果应该是一张包含用户的表。”

实现这一点的唯一方法是使用 STI(单表继承)。

“用户和熟练用户可能是同一个用户,所以单表继承是行不通的。”

我不明白这有多重要...如果这就是您的意思,您仍然可以在 User 和 SkilledUser 之间创建关联。

见参考:http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

【讨论】:

  • STI 的想法不是使用鉴别器列,例如Worker 扩展了 Person,Manager 扩展了 Person 将导致在教义中放置一个列以将 Worker 和 Manager 标记为不同。这与只是将一些关联添加到 Person 以便在一个 bundle 中使用而不影响原始 bundle 不同。
  • 正确。据我所知,您不能让一行同时成为用户和熟练用户。我也不知道你为什么想要。为什么不看看 FOSUserBundle,看看它们如何让您用您自己的替换 UserBundle 的用户实体?顺便说一句,我认为组合可能符合您想要做得更好的事情(即,对于某些用户,您可以与 SkilledUser 建立关联,从而有效地允许他们成为用户,或者也具有 SkilledUser 关联的用户.
  • 我试图不必向原始用户添加配置。到目前为止,我所做的只是通过单独的表关联用户及其技能,然后通过对用户 ID 进行分组来获取用户。这并不理想,因为我必须从 userSkills 实体中获取用户,而不是直接能够执行 $user->getSkills();相反,它必须是 $userSkill->getUser()->getSkills()。
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2012-09-05
相关资源
最近更新 更多