Symfony2 knp-paginator没有排序我的产品

时间:2015-08-03 08:45:24

标签: php symfony sorting pagination

因此knp软件包可以很好地分页我的产品,但是当涉及到排序时我没有收到任何错误,但产品不会排序。

<div class="class1">
  <span>DRAWBACK</span>
</div>

因此,当我尝试排序时,我没有收到任何错误,响应为200,URL随之改变:

<th{% if pagination.isSorted('a.price') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Price/Lowest', 'a.price') }}</th>

但产品未分类。这是某种错误吗?对于排序的东西,文档不是很清楚,但我不认为我做错了什么..

以下是价格字段:

?sort=a.pc&direction=asc&page=1

P.S。排序也不适用于其他参数,不仅仅是价格..

行动:

/**
 * @ORM\Column(name="price", type="decimal", precision=10, scale=2, nullable=true)
 */
private $price;

1 个答案:

答案 0 :(得分:1)

您仍在使用findBy()方法获取Product实体数组。 此方法将触发查询,并且分页包不再更改您的查询。相反,您应该添加自己的ProductRepository类并编写一个只返回DQL查询的方法。

class ProductRepository extends EntityRepository
{
    public function findProducts()
    {
        $qb = $this->createQueryBuilder('p');
        $qb->where('p.status=1');
        return $qb->getQuery(); // WITHOUT ->getResult(); !!
    }
}

在你的控制器中你会得到类似的东西:

$query = $em->getRepository('MpShopBundle:Product')->findProducts();

// ...

$paginator  = $this->get('knp_paginator');
$pagination = $paginator->paginate(
    $query,
    $request->query->getInt('page', 1)/*page number*/,
    9/*limit per page*/
);

还要记住,带有产品实体的数组是de $ pagination variabele而不是$ products varbele。 (您可以将$ pagination更改为$ products或更改您的twig模板)