在Doctrine 2(.1)中 - 我可以为MappedSuperclass实体创建一个(虚拟)存储库吗?

时间:2011-10-15 19:48:03

标签: inheritance doctrine repository associations doctrine-orm

我有一个MappedSuperclass抽象类(AbstractImage),其他2个实体从中继承(UrlImageUploadImage)。

Superclass与另一个实体(Post)有关联,我需要一种方法来从{{1}获取和设置UrlImageUploadImage的实例。实体自动(=意味着我在Post实体上有一个addImage,它将知道给定的实体是Post还是UploadImage实体。 / p>

同样,由于每个实体都有自己的UrlImage记录,我需要一个具有id方法的虚拟存储库,它将获得findidtypeurl)并在相应的存储库(uploadfind)上调用UploadImageRepository方法。

获取正常的存储库(如UrlImageRepository)很简单:

UrlImageRepository

但我怎么能在$em->getRepository('UrlImage'); 上做到这一点?

以下是有关此情况的更多信息:How can I do complex entity associations queries in doctrine 2? (virtual entity)

2 个答案:

答案 0 :(得分:0)

没有尝试过,但您可以尝试制作3个存储库,并使UploadImageRepositoryUrlImageRepository扩展第三个(基础,虚拟)存储库。

顺便说一下。关于MappedSuperclasses的一点建议......总是抽象,否则你会遇到各种其他错误。

答案 1 :(得分:0)

仅供参考。可以为AbstractImage加载存储库,因此find方法适用于每个继承的实体:

$imageRepository = $entityManager->getRepository('MyBundle:AbstractImage');
$urlImage = $imageRepository->find(1); //assuming record with id=1 is UrlImage entity
$uploadImage = $imageRepository->find(2); //assuming record with id=2 is UploadImage entity