Doctrine如何扩展自定义存储库并从doctrine实体管理器调用扩展存储库

时间:2017-05-04 21:33:07

标签: symfony doctrine-orm

我想知道如何扩展自定义存储库并在doctrine中从doctrine实体管理器调用扩展存储库。

我的实体课程:

/**
 * @ORM\Entity(repositoryClass="Vendor\MyBundle\Repository\MyEntityRepository")
*/
class MyEntity 
{
...

我的实体存储库类:

class MyEntityRepository extends EntityRepository
{
 ...

My Extended Repository类:

class MyExtendedEntityRepository extends MyEntityRepository
{
 ...

调用MyEntityRepository:

class MyEntityManager
{
    protected $emr;

    /**
     *
     * @return MyEntityRepository
     */
     public function getRepository()
     {
          return $this->emr->getRepository('MyVendorBundle:MyEntity');
     }
 ...

调用MyExtendedEntityRepository?

class MyOtherEntityManager
{
    protected $emr;

    /**
     *
     * @return MyExtendedEntityRepository
     */
     public function getRepository()
     {
         //This is what i want to know: How to access to the extended repository?
     }
 ...

由于

1 个答案:

答案 0 :(得分:2)

你不能,doctrine getRepository()与实体一起工作并解决相关的存储库。我不明白什么是逻辑或用例,但如果你需要重用某些部分的存储库抛出其他实体,它建议使用traits。另一方面,如果您确实需要使用该方案,则可以在MyExtendedEntityRepository方法中构建getRepository

/**
 *
 * @return MyExtendedEntityRepository
 */
 public function getRepository()
 {
   $class = $this->emr->getClassMetadata(MyEntity::class);
   return new MyExtendedEntityRepository($this->emr, $class);
 }