4

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

在这种情况下,我使用来自 OpenCart 数据库的数据,并且我需要能够通过邮政编码和公司名称进行搜索,这两者都存在于地址表中,该地址表通过客户实体中的映射值连接,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();

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

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

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

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

它返回邮政编码搜索的结果,然后在控制器中:

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

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

1 回答 1

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();
}
于 2020-07-02T10:00:51.637 回答