KNP Paginator捆绑查询问题

时间:2014-01-27 18:45:00

标签: sorting symfony doctrine-orm pagination knppaginator

我正在使用KNP Paginator捆绑包,一切正常,直到我尝试使用一对多关系关联对字段进行排序。我在purchaseOrder表中有一个名为“supplier_id”的文件,我正在尝试对此进行排序,但我不断收到“没有这样的字段...”错误。 “supplier_id”字段仅包含“供应商”表中的ID号。

这是我的代码。

        // Set the up the pagination statement...
        $em = $this->getDoctrine()->getManager();
        $dql   = "SELECT p FROM WIC\PurchaseOrderBundle\Entity\PurchaseOrder p WHERE p.account=:account_id ORDER BY p.id desc";
        $query = $em->createQuery($dql);
        $query->setParameters(array(
            'account_id' => $account->getId(),
        ));;

        $paginator  = $this->get('knp_paginator');
        $paginatorObject = $paginator->paginate(
            $query,
            $this->get('request')->query->get('page', 1),25
        );

所以基本上在第一次加载页面时,它会抓取所有采购订单。

然后我将其设置为能够按供应商排序:

 <th>{{ knp_pagination_sortable(purchaseOrders, 'Supplier', 'p.supplier') }}</th>

当我点击它进行排序时,它给了我这个错误:

 There is no such field [supplier_id] in the given Query component, aliased by [p]

我的问题是,当我排序的字段是一对多关系的一部分时,我如何排序。 ID存储在名为“supplier_id”的字段中,但它是OtoM关系。

谢谢!

2 个答案:

答案 0 :(得分:0)

总而言之,你需要做一些工作。

你基本上需要一个普通的查询来获取你想要的所有对象的id。使用这些ID然后构建一个新查询,您只需查找那些ID并对该查询进行分页。

答案 1 :(得分:0)

您可以尝试使用使用QueryBuilder Doctrine创建的DQL的paginator。