【发布时间】:2023-03-28 10:47:01
【问题描述】:
我遇到了 Symfony2/Doctrine2 的建模问题。我目前正在尝试将整个网站从以前的 PHP 框架传递到 Symfony2,并且在以前的框架中有一个我喜欢但我无法用 Symfony 和 Doctrine 建模的概念。
这是我的问题:使用以前的框架,可以将 A 类的对象链接到任何其他类(B、C、D...)的任何其他对象。为此,类 A 有一个属性 model_id 来知道该对象链接到哪个类(它对应于在配置文件中为每个类定义的唯一 id),以及一个属性 record_id,它是链接对象的外部 id .这样,例如,可以有一个类 Comment 并对任何对象(博客文章、用户等)进行评论。
由于这些通用链接似乎无法用 Doctrine 关系(ManyToOne 等)建模,因此我考虑拥有 - 就像在前一个框架中一样 - 一种全局方法或每个类的方法,例如 getItem,它查看属性 model_id 和 record_id 然后返回正确的对象。
但我又遇到了问题:
我不能直接在 Entity 中定义这个方法,因为我不应该在 Entity 类中访问数据库。
如果我在全局服务中定义一次,或者为存储库中的每个类定义 n 次 - 这是可能的,因为这次我可以访问数据库 - 我将能够在任何地方调用该方法,但在实体代码。它使实现变得非常丑陋,因为这意味着在我之前的示例中,需要访问评论的实体的所有方法都必须从实体移动到存储库。最后,我将在存储库中而不是直接在实体中拥有几乎所有的对象方法。
你有什么想法我可以有一个这样的系统,它允许一般地将一个对象链接到任何其他对象,然后轻松地恢复链接的对象,就像它是一个“通常”的学说关系?
非常感谢您的帮助。
【问题讨论】:
标签: symfony doctrine-orm