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

时间:2011-10-10 16:47:09

标签: php database-design associations doctrine-orm

假设我有一个博客应用程序 作者可以通过在网络上提供指向现有图像网址的链接或者上传新图像来为帖子添加多个图像。

我希望能够从图像(上传或网址)回溯到使用该图像的所有帖子,从特定帖子到该帖子中的所有图片(例如 - 所以我可以删除图像)这是非法的和/或暂停使用它们的帖子,直到作者修复帖子。)

但是,我为上传的图片与网址图片使用不同的实体 - 上传的图片有关图像的数据多于网址图片。

这导致更复杂的代码,因为在每次保存编辑的帖子时我需要检查哪种是特定图像(在我需要运行的帖子中的所有图像中),而不是创建或更新它记录,并分配给帖子实体中的关系字段。

所以...假设我有UploadedImageUrlImage个实体,我想在setImages实体中使用post方法,每个图像检查一次它会上传,如果已上传或网址,则会调用setUploadedImagessetUrlImages

但是,我需要某种虚拟images存储库,以相同的方式加载图像。

听起来有点复杂,我想知道:

  1. 我如何拥有虚拟学说实体(包含其存储库和所有实体)?
  2. 有更好的设计吗?

1 个答案:

答案 0 :(得分:2)

以下是您要执行的操作的文档:
http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

它描述了单表继承与类表继承。 您的案例适合后者,但也考虑迁移到单表继承。

如果(代码)这些图像的用户无论其来源如何都将它们视为相同,则添加的查询复杂性和数据库使用量将不值得标准化。