其中一个听众必须对给定目标进行计数和切片

时间:2016-09-29 11:29:08

标签: symfony doctrine knppaginator

我在Symfony2 CRM中执行搜索时遇到了上述错误,我一直在努力。根据谷歌的搜索,似乎这是一个与KNP Paginator捆绑相关的问题,但我似乎找不到可靠的解决方案。

在这种情况下,我正在使用OpenCart数据库中的数据,我需要能够通过Postcode和Company名称进行搜索,这两个名称都存在于通过Customer实体内的映射值连接的地址表中, defaultaddress

为此,我必须在名为findCustomerByPostcode的函数中编写自定义查询,如下所示:

$this->getEntityManager()
    ->createQuery('SELECT c FROM AppBundle:Oc49Customer c JOIN AppBundle:Oc49Address a WITH c.defaultaddress = a.id WHERE a.postcode LIKE :postcode')
    ->setParameter('postcode','%'.$postcode.'%')
    ->getResult();

但是,当我对邮政编码执行搜索时,我在浏览器中收到以下错误:

  

其中一个听众必须对给定目标进行计数和切片

指的是KNP包中的Paginator.php文件。我已经更新到最新的版本,2.5但我似乎无法动摇这个错误,对我来说它甚至没有意义。

非常感谢任何帮助,因为我无法想到通过联接表中的值进行搜索的另一种方式。

返回邮政编码搜索的结果,然后在Controller中返回:

$customers = $customer_repository->findCustomerByPostcode($filter_value);

$paginator = $this->get('knp_paginator');
  $pagination = $paginator->paginate(
    $customers,
    $request->query->get('page', 1),
    20
);

1 个答案:

答案 0 :(得分:0)

您可以使用带有左联接的queryBuilder

public function findCustomerByPostcode($postcode) {
    $query = $this->entityManager->createQueryBuilder();
    $query
        ->select('c', 'a')
        ->from('AppBundle:Customer', 'c')
        ->leftJoin('c.address', 'a')
        ->setParameter('postcode', $postcode)

    return $query->getQuery()->getResult();
}