【问题标题】:KNP Paginator Bundle Query IssueKNP Paginator Bundle 查询问题
【发布时间】:2014-07-18 20:12:54
【问题描述】:

我正在使用 KNP Paginator 捆绑包,一切正常,直到我尝试对具有一对多关系关联的字段进行排序。我在 purchaseOrder 表中有一个名为“supplier_id”的文件,我正在尝试对其进行排序,但我不断收到“没有这样的字段......”错误。 “supplier_id”字段仅包含“Supplier”表中的 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 关系。

谢谢!

【问题讨论】:

    标签: sorting symfony doctrine-orm pagination knppaginator


    【解决方案1】:

    长话短说,您需要解决问题。

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

    【讨论】:

      【解决方案2】:

      您可以尝试使用使用 QueryBuilder Doctrine 创建的 DQL 的分页器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-23
        • 2012-12-08
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多