1

私は次のクエリを持っています、 Symfony2でこれらのクエリを書く方法

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

ここでは3つのテーブルを使用しています。関係は次のとおりです。

InventoryStock 1-n InventoryUsageInventoryStock1-1製品

利用可能な在庫を表示する必要があります(InventoryStock.Quanitity-sum(InventoryUsage.quanitity))

また、在庫に基づく並べ替えも実装する必要があります

これが数日間私の髪を引っ張ってきたので、誰かが私を助けることができれば素晴らしいでしょう。

4

1 に答える 1

1

これにはWhiteOctoberPagerfantaBundleバンドルを使用することをお勧めします。通常どおり独自の Query オブジェクトを作成し、これを関連する Pagerfanta アダプターに渡すことができます。Doctrine を使用しているように見えるので、たとえば...

    // 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();
于 2012-10-16T10:50:30.107 に答える