3

我有一个关于存储库的问题:是否可以使用

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

在实体B的存储库中????

4

3 回答 3

10

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

$this->getEntityManager()->getRepository('***Bundle:entityA')->find($id)
于 2013-04-12T10:03:37.820 回答
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();
   }
 }
于 2013-04-12T07:31:56.057 回答
0

如果您更喜欢注入依赖项,请将您的存储库声明为服务,以便您可以注入一个以在另一个内部使用它:

服务.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 中,您必须有一个属性设置器(setEntityARepository)来存储存储库(即$entityARepository)。

于 2017-02-08T15:43:04.380 回答