如何在Doctrine 2中进行复杂实体关联查询?(虚拟实体)

7
假设我有一个博客应用程序。作者可以通过提供现有图像的 url 链接或上传新图像来向帖子添加多个图像。
我希望能够从图像(上传或 url)回溯到使用该图像的所有帖子,并从特定帖子回溯到该帖子中的所有图像(例如,这样我就可以删除非法的图像和/或暂停使用它们的帖子,直到作者修复帖子)。
但是,对于已上传的图像和 url 图像,我使用不同的实体-已上传的图像具有更多关于图像的数据。
这导致代码更加复杂,因为在每次编辑帖子时,我需要检查特定图像的种类(在帖子中的所有图像中运行),然后创建或更新其记录,并分配给帖子实体中的关系字段。
因此...假设我有一个 UploadedImage 和一个 UrlImage 实体,我考虑在 post 实体中设置一个 setImages 方法,对于每个收到的图像,检查它是上传还是 url,然后调用 setUploadedImages 或 setUrlImages。
但是,我将需要某种虚拟的 images 存储库,以相同的方式加载图像。
听起来有点复杂,我想知道:
1.如何拥有一个虚拟的 doctrine 实体(包括其存储库等)?
2.是否有更好的设计方法?

3
你考虑过使用继承映射吗? - Orbling
@Orbling 以什么方式?它将如何解决决定如何处理每种类型的“问题”? - Doron
通过使用继承映射,您可以拥有一个表示两种类型的超类,然后它们可以一起处理。它们可以具有相同的方法,并根据子类型执行不同的操作。 - Orbling
Doron是正确的,这正是继承的意义所在。您有一个基本实体类(或映射超类),它提供了两种类型共同的所有功能。然后,UrlImage和UploadedImage可以提供自己的方法实现,例如getUrl()。您还可以拥有其他以图像(无论哪种类型)作为参数的方法,例如'flagAllPostsContainingImage($Image)`。 - timdev
就我个人而言,我觉得有趣的是为什么“Post”实体应该与“UploadedImage”有所联系?它只需要关心“UrlImage”即可。 - dardarlt
我建议您也看一下Doctrine Embeddables,网址为http://doctrine-orm.readthedocs.org/en/latest/tutorials/embeddables.html。 - dardarlt
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接