2012-10-16 60 views
1

我有以下查詢,如何在Symfony2的寫這些查詢在Symfony2中向paginator(KNP 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 

我需要實現一個symfony的方式

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; 
} 

,並在考慮到上述查詢

{% 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

它顯示「致命的錯誤:Class'WhiteOctober \ PagerfantaBundle \ WhiteOctoberPagerfantaBundle'找不到34行中的/var/www/Safflower/app/AppKernel.php」 – Unni