2012-10-16 2 views
1

I가 다음 쿼리, 에 Symfony2 이러한 쿼리를 작성하는 방법 내가 심포니 방법Symfony2의 paginator (KNP Paginator)에 사용자 정의 쿼리를 추가 하시겠습니까?

private function getList($query = null) 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 

    if(!$query) 
    { 
     $query = $em->createQueryBuilder() 
      ->select('i') 
      ->from('ItxBundle:InventoryStock', 'i') 
      ->innerJoin('i.Product','p') 
      ->getQuery(); 

    } 
    $adapter = $this->get('knp_paginator.adapter'); 
    $adapter->setQuery($query); 
    $adapter->setDistinct(TRUE); 


    $paginator = new Paginator($adapter); 
    $paginator->setCurrentPageNumber($this->get('request')->query->get('page', 1)); 
    $paginator->setItemCountPerPage($this->container->parameters['items_per_page']); 
    $paginator->setPageRange($this->container->parameters['page_range']); 
    return $paginator; 
} 

과보기에 위의 쿼리를 구현해야

SELECT Inventory_Stock.id, Inventory_Stock.quantity, SUM(InventoryUsage.quantity) 
     ,Inventory_Stock.quantity - SUM(InventoryUsage.quantity) AS Stock 

FROM Inventory_Stock LEFT JOIN InventoryUsage ON Inventory_Stock.id = InventoryUsage.InventoryStock_id 

WHERE Inventory_Stock.id = 26 OR 
     Inventory_Stock.id = 27 

GROUP BY Inventory_Stock.id 
ORDER BY Stock DESC 

{% if entity.quantity - entity.Usage < 0 %} 
    0 
{% else %} 
    {{ entity.quantity - entity.Usage | number_format(0) }} 
{% endif %} 

여기에 세 개의 테이블을 사용하고 있습니다. 아래 주어진 관계는

입니다.

InventoryStock 1 - n은 InventoryUsage InventoryStock 1 - 1 제품 사용 가능한 재고를 보여

필요 (InventoryStock.Quanitity - 합 (InventoryUsage.quanitity))

는 증권을 기반으로뿐만 아니라

종류를 구현해야

며칠 동안 내 머리카락을 꺼내는 사람이 있으면 나를 도와 줄 수 있다면 좋을 것입니다.

답변

1

WhiteOctoberPagerfantaBundle 번들을 사용하는 것이 좋습니다. 평상시처럼 자신 만의 Query 객체를 만든 다음 관련 Pagerfanta 어댑터에 전달할 수 있습니다. 당신이 기억

// at the top of the file: 
    use Pagerfanta\Pagerfanta, 
     Pagerfanta\Adapter\DoctrineORMAdapter; 


    // Build your query... 
    /** @var $query \Doctrine\ORM\Query */ 
    //$query = ... 

    $currentPage = $this->getRequest()->get('page', 1); 

    $pagerfanta = new Pagerfanta(new DoctrineORMAdapter($query)); 
    $pagerfanta 
     ->setMaxPerPage($maxItems) // you'll need to specify this value 
     ->setCurrentPage($currentPage) 
    ; 
    $results = $pagerfanta->getCurrentPageResults(); 
+0

... 예를 들어, 그래서 교리를 사용하는 것처럼 보이는, DQL 일반 SQL의 모든 기능 http://stackoverflow.com/questions/12652034/how-can-i 포함되어 있지 않습니다 -order-by-null-in-dql/12654552 # 12654552 SUM이 지원되지 않는다고 생각합니다. –

+0

도 정렬 할 수 있습니까? – Unni

+0

"치명적인 오류 : 클래스 'WhiteOctober \ PagerfantaBundle \ WhiteOctoberPagerfantaBundle'/var/www/Safflower/app/AppKernel.php 34 행에 없습니다" – Unni

관련 문제