2012-05-09 3 views
1

예를 들어, Jobeet의 튜토리얼로 첫 페이지를 고려해EntityRepository를 다른 내부에서 사용하는 것이 유효합니까?

클래스 CategoriesRepository이 EntityRepository {

public function getWithJobs($limit) 
    { 
    $categories = $this->getContainingJobs(); 
    $jobsRepo = $this->em->getRepository("JobeetBundle:Jobs"); 
    foreach($categories as $c) { 
     $c->setActiveJobs($jobsRepo->getActiveJobsByCategory($c->id, $limit); 
    } 
    return $categories; 
    } 

}를 확장

그래서 컨트롤러 내부에 나는 두 저장소의 사용에 대한 서비스 계층을 사용해야합니다 '해달라고 .

누군가 나에게 조언을 해줄 수 있습니까?

답변

1

범주와 작업 간의 연결을 정의한 경우 다른 저장소를 호출 할 필요가 없습니다. http://symfony.com/doc/current/book/doctrine.html#joining-to-related-records

그리고이 문서에서 나오는 예 :

// src/Acme/StoreBundle/Repository/ProductRepository.php 

public function findOneByIdJoinedToCategory($id) 
{ 
    $query = $this->getEntityManager() 
     ->createQuery(' 
      SELECT p, c FROM AcmeStoreBundle:Product p 
      JOIN p.category c 
      WHERE p.id = :id' 
     )->setParameter('id', $id); 

    try { 
     return $query->getSingleResult(); 
    } catch (\Doctrine\ORM\NoResultException $e) { 
     return null; 
    } 
} 
당신은 여기

공식이 경우에 대한 설명서입니다 ... 이미 DQL 쿼리를 결합하여 설정 관련 작업으로 카테고리 엔티티를 얻을
+0

나는 이렇게 할 수 없다. 하나의 범주로 10 개의 레코드를 가져오고 싶기 때문에 모든 범주에 대해 SQL 쿼리를 호출해야합니다. Symfony 1 Jobeet 튜토리얼과 비슷합니다. 내가 원하는 것은 서비스 계층을 사용하여 활성 작업을 범주와 병합하지 않는 것입니다. – keram

+0

IMHO 저장소 저장소에서 EM을 사용할 수있는 경우 다른 저장소를 사용할 수 있습니다. 나는 그것이 좋은 디자인 실천이라는 것을 확실히하고 싶다. – keram

+0

할 수 있습니다. 리포지토리에서 EntityManager를 사용할 수있는 것은 좋지 않은 것처럼 보입니다. – AlterPHP

관련 문제