在另一个存储库symfony2中调用存储库

时间:2013-04-12 07:16:11

标签: php symfony

我对存储库有疑问:是否可以使用

$em = $this->getDoctrine()
                ->getEntityManager();
     $range = $em->getRepository('***Bundle:entityA')
                ->find($id);

在entityB ????

的存储库中

3 个答案:

答案 0 :(得分:6)

在您的资源库类中,您已经可以访问实体管理器,因此您只需要执行以下操作:

$this->getEntityManager()->getRepository('***Bundle:entityA')->find($id)

答案 1 :(得分:1)

我建议如下:

案例A: 您需要查询2个实体,彼此没有关系。 使用2个存储库,2个查询

$range1 = $em->getRepository('***Bundle:entityA')->find($id);
$range2 = $em->getRepository('***Bundle:entityB')->find($id);

案例B: 您需要查询2个实体,彼此相关或相互依赖。 使用1个存储库,编写自定义存储库函数,连接它们或在多个表上选择

$range = $em->getRepository('***Bundle:entityA')->findAjoinedB();

 class EntityArepository extends EntityRepository
 {

   public function findAjoinedB(){
       $qb = $this->createQueryBuilder('entityA')
             ->leftJoin('entityA.entityB_id', 'entityB')
             ->where(....
             ....;

       return $qb->getQuery()->getResult();
   }
 }

答案 2 :(得分:0)

如果您想要更多注入依赖项,请将您的存储库声明为服务,这样您就可以注入一个以在另一个中使用它:

<强> services.yml

services:
    repository.entity_a:
        class: AppBundle\Entity\EntityARepository
        factory: [@doctrine, getRepository]
        arguments:
            - AppBundle::EntityA

    repository.entity_b:
        class: AppBundle\Entity\EntityBRepository
        factory: [@doctrine, getRepository]
        arguments:
            - AppBundle::EntityB
        calls:
            - [setEntityARepository, [@repository.entity_a]]
在EntityBRepository.php中,你必须有一个setter(setEntityARepository)来存放一个存储库(即$ entityARepository)。