2013-04-12 68 views
2

我有一個關於庫問題的存儲庫:是否有可能在entityB的倉庫使用調用不同的版本庫的Symfony2

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

????

回答

6

在你的倉庫類,你已經可以訪問實體管理器,所以你只需要做:

$this->getEntityManager()->getRepository('***Bundle:entityA')->find($id) 
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(); 
    } 
} 
+0

我需要$ range = $ em-> getRepository('*** Bundle:entityA') - > find($ id);在entityB存儲庫中。 @DerStoffel – user2269869

+0

爲了正確回答,我需要你的用例和實體關係。 – DerStoffel

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)。