2014-10-14 2 views
0

DB에서 마지막 5 행을 가져오고 싶지만 그렇게 할 수는 없습니다. 나는 해결책을 찾으려고 노력했다. 그러나 나는 어떤 결과도 얻지 않았다. 다음과 같이 쓰고 싶습니다 :DB에서 선택한 행의 제한 설정

$this->getDotrine->getRepository('Entity')->findAll(...); 

->slice() 나를 위해 작동하지 않습니다.

답변

3

데이터베이스 수준에서 결과 수를 제한해야합니다. Doctrine의 DQL 쿼리. 당신의 Entity 저장소 내에서 사용자 정의 방법을 만들기 :

public function findLatest($limit) { 
    return $this->createQueryBuilder('e') 
     ->setMaxResults($limit) 
     ->getQuery() 
     ->getResult(); 
} 
+0

감사합니다. 저장소가 없으면 감사 할 수 있습니까? – nowiko

+0

필요한 것은'EntityManager'와 그것의 ['createQueryBuilder()'] (http://www.doctrine-project.org/api/orm/2.1/source-class-Doctrine.ORM.EntityManager.html)에 대한 액세스뿐입니다. # 313-321) method (이것은 ['EntityRepository :: createQueryBuilder()'가하는 일입니다.] (https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/EntityRepository.php#L79)). 'EntityManager'는 컨트롤러 내에서'doctrine.orm.entity_manager' 서비스 또는'$ this-> getDoctrine() -> getObjectManager()'로 사용할 수 있습니다. – Crozin

0

당신은

$qb->setMaxResults(); 

를 사용할 필요가 예를 들어,

// 컨트롤러

$results = $this->getDoctrine()->getRepository('nameandbundle:entity')->findAllWithLimit(10); 

그래서 그 실체에 대한 respostiory 클래스는 단순히 입력에;

function findAllWithLimit($limit) { 

     return $this->getEntityManager() 
        ->createQueryBuilder() 
        ->select('e') 
        ->setMaxResults($limit) 
        ->getQuery() 
        ->getResult(); 
    } 

리포지토리없이이 작업을 수행 할 수 있지만 뚱뚱한 모델의 얇은 컨트롤러를 따라야하므로 권장하지 않습니다. 그러나 당신은 이렇게 할 것입니다.

$em = $this->getDoctrine()->getManager(); 
    $qb = $em->createQueryBuilder(); 
    $results = $qb->select('e') 
        ->from('youbundle:entity', 'e') 
        ->setMaxResults(10) 
        ->getQuery() 
        ->getResult();