【问题标题】:Adding custom query to paginator (KNP Paginator) in Symfony2?在 Symfony2 中向分页器(KNP Paginator)添加自定义查询?
【发布时间】:2012-10-16 10:27:01
【问题描述】:

我有以下查询,如何在 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 %}

我在这里使用了三个表,下面给出了关系

InventoryStock 1 - n InventoryUsage InventoryStock 1 - 1 产品

需要显示可用库存(InventoryStock.Quantity - sum(InventoryUsage.quanitity))

还需要实现基于 Stock 的排序

如果有人可以帮助我,那就太好了,因为这已经把我的头发拉了几天了。

【问题讨论】:

    标签: php symfony pagination


    【解决方案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();
    

    【讨论】:

    • 请记住,DQL 并不包含普通 SQL 的所有功能stackoverflow.com/questions/12652034/… 我认为不支持 SUM
    • 也可以排序吗?
    • 它显示“致命错误:在第 34 行的 /var/www/Safflower/app/AppKernel.php 中找不到类 'WhiteOctober\PagerfantaBundle\WhiteOctoberPagerfantaBundle'”
    • 这听起来就像供应商捆绑包没有正确安装。如果您使用的是 Symfony 2.0,请确保您已更新您的 deps 文件,执行 php bin/vendors install 并将其添加到您的 autoload.php 中。如果您使用的是 Symfony 2.1,请确保您已将供应商添加到您的 composer.json 并执行 php composer.phar update
    • 是的,做到了,它开始工作了..但我遇到了另一个问题,我在这里发布了stackoverflow.com/questions/12973709/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多