2012-12-24 1 views
3

두 개의 엔티티 질문 및 태그가 있습니다. 그들 사이에는 많은 관계가 있고, 생성 된 'tag_question'테이블 (question_id 및 tag_id 열 포함)이 있습니다.Symfony2의 다 대다 관계 결과 제한

$questions = $tag->getQuestion(); 

이렇게하면 태그와 함께 모든 결과와 모든 결과가 반환됩니다. 이 메소드는 태그 엔티티에서 Doctrine2에 의해 자동으로 생성됩니다. 결과를 제한하는 방법 (페이지 매김 추가 등)?

답변

5

성능이 큰 문제가 아닐 경우 Doctrine을 사용하여 모든 Question 엔터티에 대한 참조를 얻고 PHP가 필터링을 수행하도록하지 않아야합니다 (MySQL이 수행하는 대신)). 기본적으로 Doctrine은 완전한 엔티티를 반환하지 않는다는 것을 기억하십시오. 성능이 문제가되는 경우

class Question 
{ 
    public function getQuestions($offset = 0; $length = null) 
    { 
     return array_slice($this->questions, $offset, $length); 
    } 
} 

그러나, 당신이 사용자 정의 저장소 클래스를 생성에보고 할 수 있습니다 : 오히려, 그것은 (나중에 완전히 데이터베이스에 다른 쿼리를 통해 수화 될 수있다) 프록시 객체를 반환 맞춤 DQL 쿼리 또는 Doctrine의 QueryBuilder 클래스를 실행하는 메소드 :

class TagRepository 
{ 
    public function findSomeByQuestion($question, $offset, $length) 
    { 
     $qb = $this->createQueryBuilder("tag") 
      ->select("tag") 
      ->join("tag.questions", "questions") 
      ->where("question.id = :questionId") 
      ->setParameter("questionId", $question->getId()) 
      ->setFirstResult($offset) 
      ->setMaxResults($length); 
     return $qb->getQuery()->getResult(); 
    } 
}